{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![MLU Logo](../data/MLU_Logo.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# <a name=\"0\">Machine Learning Accelerator - Natural Language Processing - Lecture 3</a>\n",
    "\n",
    "## Word Vectors\n",
    "Word vectors refers to a family of related techniques, first gaining popularity via ```Word2Vec``` which associates an $n$-dimensional (normally $n$ is in the range of $50$ to $500$.  For us it will be $300$) vector to every word in the target language.\n",
    "\n",
    "We will first load a batch of word vectors known as [ConceptNet Numberbatch](https://github.com/commonsense/conceptnet-numberbatch), which have been found to have excellent performance while reducing issues of [learning human bias](https://gist.github.com/rspeer/ef750e7e407e04894cb3b78a82d66aed).  Learning how to construct these word vectors is a bit beyond the scope of what we can cover in this notebook, but [this two-part blog post provides an excellent introduction](http://mccormickml.com/2016/04/19/word2vec-tutorial-the-skip-gram-model/).\n",
    "\n",
    "We will go over these:\n",
    "1. <a href=\"#1\">How to get the most from this notebook</a>\n",
    "2. <a href=\"#2\">Computing Distances</a>\n",
    "3. <a href=\"#3\">Linear Structure of Word Vectors (Subtraction)</a>\n",
    "4. <a href=\"#4\">Reverse Lookup</a>\n",
    "5. <a href=\"#5\">Application: Analogies</a>\n",
    "6. <a href=\"#6\">Visualization (PCA)</a>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. <a name=\"1\">How to get the most from this notebook</a>\n",
    "(<a href=\"#0\">Go to top</a>)\n",
    "\n",
    "This builds out a solution in a step by step manner making it clear where data is being used and what tools are useful for exploration.  After every code block, I encourage you to explore your own problem from beginning to end using these tools."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--2024-10-12 19:16:35--  https://conceptnet.s3.amazonaws.com/downloads/2017/numberbatch/numberbatch-en-17.06.txt.gz\n",
      "Resolving conceptnet.s3.amazonaws.com (conceptnet.s3.amazonaws.com)... 16.15.177.62, 52.217.131.249, 54.231.203.161, ...\n",
      "Connecting to conceptnet.s3.amazonaws.com (conceptnet.s3.amazonaws.com)|16.15.177.62|:443... connected.\n",
      "HTTP request sent, awaiting response... 200 OK\n",
      "Length: 269500348 (257M) [text/plain]\n",
      "Saving to: 'numberbatch-en-17.06.txt.gz'\n",
      "\n",
      "numberbatch-en-17.0 100%[===================>] 257.01M  65.6MB/s    in 4.1s    \n",
      "\n",
      "2024-10-12 19:16:39 (62.3 MB/s) - 'numberbatch-en-17.06.txt.gz' saved [269500348/269500348]\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved\n",
    "# SPDX-License-Identifier: MIT-0\n",
    "\n",
    "! wget https://conceptnet.s3.amazonaws.com/downloads/2017/numberbatch/numberbatch-en-17.06.txt.gz"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "! gzip -d numberbatch-en-17.06.txt.gz"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "# Load our libraries\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "# Load word vectors\n",
    "words = pd.read_csv('numberbatch-en-17.06.txt',\n",
    "                    sep=\" \",\n",
    "                    index_col=0,\n",
    "                    header=None,\n",
    "                    skiprows=[0]).transpose()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The code snippet above loads our wordvectors.  The Pandas table ```words``` allows us to perform lookups like ```words['house']``` to get the associated vectors.  Let's just print one out for reference."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1      0.0331\n",
      "2      0.1253\n",
      "3      0.0865\n",
      "4      0.0641\n",
      "5     -0.1315\n",
      "        ...  \n",
      "296   -0.0046\n",
      "297   -0.0053\n",
      "298    0.0449\n",
      "299   -0.0277\n",
      "300   -0.0500\n",
      "Name: house, Length: 300, dtype: float64\n"
     ]
    }
   ],
   "source": [
    "print(words['house'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Such a vector is not particularly informative to us since it is not organized in a humanly readable way."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. <a name=\"2\">Computing Distances</a>\n",
    "(<a href=\"#0\">Go to top</a>)\n",
    "\n",
    "As part of our \"manipulation primitives\", we often need to be able to compute distances between vectors associated to words.  So we start by writing a little snippet that lets us do so.  ```numpy``` makes this fairly easy to do.  Remember that small distances correspond to similar words, so lets check this by going through and writing a little code that takes three words and tells you if the first word is closer to the second than the third."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "# define the distance between two words\n",
    "def dist(w1,w2) :\n",
    "    return np.linalg.norm(words[w1] - words[w2])\n",
    "    \n",
    "# Say if w1 is closer to w2 than w3\n",
    "def distCompare(w1, w2, w3) :\n",
    "    d2 = dist(w1,w2)\n",
    "    d3 = dist(w1,w3)\n",
    "    if d2 < d3 :\n",
    "        print(\"{} is closer to {} than {}\".format(w1,w2,w3))\n",
    "    else :\n",
    "        print(\"{} is closer to {} than {}\".format(w1,w3,w2))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "orb is closer to ball than hockey\n",
      "picked is closer to lifted than play\n",
      "pink is closer to red than blue\n"
     ]
    }
   ],
   "source": [
    "distCompare('orb','ball','hockey')\n",
    "distCompare('picked','lifted','play')\n",
    "distCompare('pink','red','blue')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We see that it mostly agrees with what we anticipated.  If you continued to ask more questions, you'd find some things that disagree with what you would expect (for instance, it believes that ```'maroon'``` is closer to ```'blue'``` than ```'red'```), but on the whole, you'll find it agrees with the intuition that similar words should be close to one another. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. <a name=\"3\">Linear Structure of Word Vectors (Subtraction)</a>\n",
    "(<a href=\"#0\">Go to top</a>)\n",
    "\n",
    "If word vectors only put similar words next to one another, they would have never garnered the interest that they have obtained from the community.  Indeed they actually contain subtle and nuanced understanding of the meanings of words.  It will take a while to explore what this means, but the mantra that we should now internalize is \"relationships = directions\" which is to say that words that share a similar relationship, will be separated from one another in the same direction.\n",
    "\n",
    "As we saw, vector subtraction lets us examine this.  However, since vector subtraction is as simple as\n",
    "```python\n",
    "diff = v - w\n",
    "```\n",
    "there is not much to look at here.\n",
    "\n",
    "## 4. <a name=\"4\">Reverse Lookup</a>\n",
    "(<a href=\"#0\">Go to top</a>)\n",
    "\n",
    "Reverse lookup will allow us to probe the finer structure of word vectors.  In particular, we will now create a reverse lookup routine that finds the $k$ closest words to a given vector.  As the straight-forward implementation will be too slow (looping over every element of ```words```) we will provide you with a ```numpy``` implementation which will be fast enough for our needs."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['blue' 'bluecurls' 'bluishness' 'bluer' 'unblue' 'bluest' 'blueish'\n",
      " 'cyanol' 'bluely' 'gridelin' 'iridovirus' 'ceruleous' 'roygbiv'\n",
      " 'cyanophore' 'lazuline' 'berylline' 'acyanopia' 'bluing' 'blueness'\n",
      " 'chromostereopsis' 'umangite' 'red' 'yellowred' 'bluet' 'bluetit'\n",
      " 'purple' 'yellow' 'kumst' 'cerulean' 'purpre' 'mauvette' 'bepurple'\n",
      " 'bluish' 'purpureal' 'pyrrh' 'deredden' 'indigoidine' 'zaffre' 'argb'\n",
      " 'bloncket' 'turquoisey' 'puniceous' 'luteo' 'rubiform' 'xanthous'\n",
      " 'xanthochromic' 'crustaceorubin' 'vitellorubin' 'tetronerythrin'\n",
      " 'cyanophyll']\n"
     ]
    }
   ],
   "source": [
    "# drop things containing underscores (these are compound terms like \"young_man\" that our code will not use) and convert to matrix format for faster computation\n",
    "labels  = words.columns.values.tolist()\n",
    "labels = np.array([w for w in labels if isinstance(w,str) and w.isalpha()])\n",
    "wordsMatrix = words[labels].values\n",
    "\n",
    "# snipped to find the closest word (or vector)\n",
    "def find_closest_word(v, k = 1):\n",
    "    if type(v) == type('str'):\n",
    "        v = words[v]\n",
    "    diff = wordsMatrix - v.values.reshape(-1,1)\n",
    "    delta = np.linalg.norm(diff, axis=0)\n",
    "    return labels[np.argsort(delta)[:k]]\n",
    "    \n",
    "# test with the 50 closest words to blue\n",
    "print(find_closest_word('blue', 50))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Seems to work to me!  Lots of blue related words, and then words related to other colors.  Many of them, like ```'tetronerythrin'``` actually relate to specific pigments."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5. <a name=\"5\">Application: Analogies</a>\n",
    "(<a href=\"#0\">Go to top</a>)\n",
    "\n",
    "Let us suppose that we have four associated word vectors $v_{man}$, $v_{woman}$, $v_{boy}$, and $v_{girl}$.  If we believe the idea that \"relationship = direction\" then, this becomes a vector relationship, where the vector that takes us from $v_{man}$ to $v_{woman}$ should be the same as the vector that takes us from $v_{boy}$ to $v_{girl}$.  Recalling that vector subtraction is what gives us such a direction, this becomes\n",
    "$$\n",
    "v_{woman} - v_{man} \\approx v_{girl} - v_{boy}\n",
    "$$\n",
    "\n",
    "Suppose you now wanted to solve an analogy using this idea.  Say we were just given ```man:woman::boy:?``` and we wanted to find the question mark.  The expression above can be rearranged by adding $v_{boy}$ to both sides to yield\n",
    "$$\n",
    "v_{?} \\approx v_{woman} - v_{man} + v_{boy}\n",
    "$$\n",
    "Thus the word we are looking for should hopefully be the word whose associated vector is closest to $v_{woman} - v_{man} + v_{boy}$.  Let's see how this works out in code."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "# A little snippet for analogies\n",
    "def analogy(w1,w2,w3, k = 1) : \n",
    "    listPoss = find_closest_word(words[w2] - words[w1] + words[w3], k)\n",
    "    print(\"{} : {} :: {} : {}\".format(w1,w2,w3,listPoss))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "man : woman :: boy : ['girl' 'boy']\n",
      "short : tall :: shortest : ['tallest' 'tall']\n",
      "seattle : washington :: minneapolis : ['minnesota' 'minneapolis']\n"
     ]
    }
   ],
   "source": [
    "# A few examples\n",
    "analogy('man','woman','boy', 2)\n",
    "analogy('short','tall','shortest', 2)\n",
    "analogy('seattle','washington','minneapolis', 2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "All in all, this should have worked fantastically!  The first one will indeed show that ```man : woman :: boy : girl``` as the most likely choice. The second will state that ```short : tall :: shortest : tallest``` is the most likely case indicating that it understands how to turn words into superlatives (not just a simple relationship of size).  The third one indicates it understands what the largest cities in Washington and Minnesota are and can retrieve that information if needed."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 6. <a name=\"6\">Visualization (PCA)</a>\n",
    "(<a href=\"#0\">Go to top</a>)\n",
    "\n",
    "Let's implement our last little primitive: the ability to automatically visualize what a collection of vectors is doing by projecting it onto the best possible pair of directions.  We will use [sklearn](http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html) to do this."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0gAAAMtCAYAAACl3lEyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABOAElEQVR4nO3df5RXdYH/8ddHkBkkZhQRBEUhzR8IpILgSP4G1MRyWxNjHbNdf3U0UzdDcg3wtJlZm7kr/kjLVdOl0jzqlyUB01BBUiBzUeu0+HtGEXLGMJAfn+8fXmabABPkwwg8Hud8Ts2b972f92fOzXxy7+feUrlcLgcAAIBs09YLAAAA+LAQSAAAAAWBBAAAUBBIAAAABYEEAABQEEgAAAAFgQQAAFBo39YL2NhWrVqVV199NZ07d06pVGrr5QAAAG2kXC7nrbfeSs+ePbPNNu/v3NAWF0ivvvpqevXq1dbLAAAAPiReeuml7Lrrru9r7hYXSJ07d07y7i+hpqamjVcDAAC0lebm5vTq1aulEd6PLS6QVl9WV1NTI5AAAID1+uqNmzQAAAAUBBIAAEBBIAEAABQEEgAAQEEgAQAAFAQSAABAQSABAAAUBBIAAEBBIAEAABQEEgAAQEEgAQAAFAQSAAA5/fTT07t377ZexgZ59dVXM378+MybN6+tl8IWQCABALBZe/XVVzNhwgSBxEYhkAAAAAoCCQBgK7Bw4cKcddZZ6dWrV6qqqrLTTjtl6NChmTZt2jq3Wbp0acaOHZs+ffqkQ4cO2WWXXXLuuefmzTffbJlz8cUXp7a2NitXrmwZ+9KXvpRSqZSrrrqqZWzRokXZZptt8u///u8tY83NzfnKV77Sav8XXHBBlixZ0modP/3pTzNkyJDU1tZmu+22y0c/+tH84z/+Y5LkoYceykEHHZQk+cIXvpBSqZRSqZTx48d/kF8XW7H2bb0AAAAqr76+PnPmzMm//uu/Zq+99sqbb76ZOXPmZNGiRWudXy6Xc+KJJ2b69OkZO3ZsDj300Dz11FMZN25cZs6cmZkzZ6aqqirDhg3Ld77zncyePTt1dXVJkmnTpqVjx46ZOnVqLr744iTJ9OnTUy6XM2zYsCTJ22+/ncMPPzwvv/xyvva1r2XAgAH5n//5n3z961/Pb3/720ybNi2lUikzZ87MqFGjMmrUqIwfPz7V1dV54YUX8uCDDyZJDjzwwPzoRz/KF77whfzLv/xLjj/++CTJrrvuWulfKVsogQQAsBV49NFHc8YZZ+TMM89sGfv0pz+9zvkPPPBAfvGLX+Tb3/52S+QMHz48vXr1yqhRo3LrrbfmzDPPzKGHHpoOHTpk2rRpqauryyuvvJJnn302Y8aMyTXXXJNly5alqqoq06ZNS8+ePbPvvvsmSa655po89dRTefzxxzNo0KAkydFHH51ddtklJ510UqZMmZLjjjsujz32WMrlcq6//vrU1ta2rO/0009PktTU1KRfv35Jkj322CMHH3zwRv29sfWp+CV2EydOTJ8+fVJdXZ2BAwdmxowZ72u7Rx99NO3bt8/+++9f2QUCAGwFBg8enFtuuSXf+MY3MmvWrCxfvvw9568+Q7M6RFb77Gc/m06dOmX69OlJku222y51dXUtl+pNnTo122+/fS6++OK88847eeSRR5K8e1Zp9dmjJLn//vvTr1+/7L///lmxYkXL65hjjkmpVMpDDz2UJC2Xz5188sn5yU9+kldeeeUD/y7gvVQ0kCZNmpQLLrggl156aebOnZtDDz00xx13XF588cX33K6pqSmnnXZajj766EouDwBgqzFp0qR8/vOfz0033ZS6urp06dIlp512WhobG9c6f9GiRWnfvn122mmnVuOlUik777xzq0vzhg0bllmzZmXJkiWZNm1ajjrqqOy4444ZOHBgpk2blgULFmTBggWtAum1117LU089lW233bbVq3PnzimXy3njjTeSJIcddljuueeerFixIqeddlp23XXX9OvXL3feeWcFfktQ4UD6t3/7t/zTP/1TzjjjjOy77765+uqr06tXr1x33XXvud3ZZ5+d0aNHt1zHCgDAB9O1a9dcffXVef755/PCCy/kiiuuyN13373GGaLVdtxxx6xYsSILFy5sNV4ul9PY2JiuXbu2jB199NF555138qtf/SrTp0/P8OHDW8anTp2aqVOntvz8l+vp379/fv3rX6/1ddlll7XM/fSnP53p06enqakpDz30UHbdddeMHj06M2fO3Fi/HmhRsUB655138uSTT2bEiBGtxkeMGJHHHntsndv96Ec/yh/+8IeMGzfufb3PsmXL0tzc3OoFAMC67bbbbjnvvPMyfPjwzJkzZ61zVsfM7bff3mr8rrvuypIlS1rFzuDBg1NTU5Orr746jY2NLYE0bNiwzJ07Nz/5yU/St2/f9OzZs2WbkSNH5g9/+EN23HHHDBo0aI3X2h5aW1VVlcMPPzxXXnllkmTu3Lkt40ny5z//eQN/I/B/KnaThjfeeCMrV65M9+7dW4137959nadyf//73+eSSy7JjBkz0r79+1vaFVdckQkTJnzg9QIAbKmamppy5JFHZvTo0dlnn33SuXPn/PrXv86UKVPymc98Zq3bDB8+PMccc0zGjBmT5ubmDB06tOUudgcccEDq6+tb5rZr1y6HH3547rvvvvTp0yd77LFHkmTo0KGpqqrK9OnTc/7557fa/wUXXJC77rorhx12WC688MIMGDAgq1atyosvvpgHHngg//zP/5whQ4bk61//el5++eUcffTR2XXXXfPmm2/m+9//frbddtscfvjhSd69OUPHjh3z4x//OPvuu28+8pGPpGfPnq2CDN6vit+koVQqtfq5XC6vMZYkK1euzOjRozNhwoTstdde73v/Y8eOTVNTU8vrpZde+sBrBgDYklRXV2fIkCG57bbb8g//8A857rjjctNNN2XMmDH5wQ9+sNZtSqVS7rnnnlx00UX50Y9+lE9+8pP5zne+k/r6+jz44IMtZ21WW/39or/8nlFVVVU+8YlPrDGeJJ06dcqMGTNy+umn58Ybb8zxxx+fk08+Oddcc0123XXXljNIQ4YMSWNjY8aMGZMRI0bkrLPOSseOHfPggw9mv/32S/LujSJ++MMfZtGiRRkxYkQOOuig3HjjjRvld8fWp1Qul8uV2PE777yT7bbbLj/96U/zd3/3dy3jX/7ylzNv3rw8/PDDrea/+eab2WGHHdKuXbuWsVWrVqVcLqddu3Z54IEHctRRR/3N921ubk5tbW2amppSU1Oz8T4QAACwWdmQNqjYGaQOHTpk4MCBLV/KW23q1Kk55JBD1phfU1OT3/72t5k3b17L65xzzsnee++defPmZciQIZVaKgAAQJIKPyj2oosuSn19fQYNGpS6urrceOONefHFF3POOeckeffyuFdeeSW33nprttlmm5aHfK3WrVu3VFdXrzEOAABQCRUNpFGjRmXRokW5/PLL09DQkH79+mXy5MnZfffdkyQNDQ1/85lIAAAAm0rFvoPUVnwHCQAgWbmqnNkLFuf1t5amW+fqDO7TJe22WfNGWbAl25A2qOgZJAAANr0pTzdkwn3z09C0tGWsR211xp3QN8f269GGK4MPv4rf5hsAgE1nytMN+eLtc1rFUZI0Ni3NF2+fkylPN7TRymDzIJAAALYQK1eVM+G++Vnb9ydWj024b35WrtqivmEBG5VAAgDYQsxesHiNM0d/qZykoWlpZi9YvOkWBZsZgQQAsIV4/a11x9GGzIOtkUACANhCdOtcvVHnwdZIIAEAbCEG9+mSHrXVWdfNvEt59252g/t02ZTLgs2KQAIA2EK026aUcSf0TZI1Imn1z+NO6Ot5SPAeBBIAwBbk2H49ct2pB2bn2taX0e1cW53rTj3Qc5Dgb/CgWACALcyx/XpkeN+dM3vB4rz+1tJ06/zuZXXOHMHfJpAAALZA7bYppW6PHdt6GbDZcYkdAABAQSABAAAUBBIAAEBBIAEAABQEEgAAQEEgAQAAFAQSAABAQSABAAAUBBIAAEBBIAEAABQEEgAAQEEgbaEmTZqU/fbbLx07dkypVMq8efM22r4nT56c8ePHb7T9rcs3v/nN3HPPPRV/HwAAWE0gbYEWLlyY+vr67LHHHpkyZUpmzpyZvfbaa6Ptf/LkyZkwYcJG29+6CCQAADa19m29ADa+3/3ud1m+fHlOPfXUHH744W29HAAA2Gw4g7SFOf300/OJT3wiSTJq1KiUSqUcccQReeKJJ3LKKaekd+/e6dixY3r37p3Pfe5zeeGFF1pt//bbb+crX/lK+vTpk+rq6nTp0iWDBg3KnXfe2bL/a6+9NklSKpVaXs8//3ySpFwuZ+LEidl///3TsWPH7LDDDjnppJPyv//7v63eZ+7cuRk5cmS6deuWqqqq9OzZM8cff3xefvnlln0vWbIk//mf/9nyHkcccUQFf3MAAOAM0hbnsssuy+DBg3Puuefmm9/8Zo488sjU1NRk/vz52XvvvXPKKaekS5cuaWhoyHXXXZeDDjoo8+fPT9euXZMkF110UW677bZ84xvfyAEHHJAlS5bk6aefzqJFi1r2v2TJkvzsZz/LzJkzW963R48eSZKzzz47t9xyS84///xceeWVWbx4cS6//PIccsgh+c1vfpPu3btnyZIlGT58ePr06ZNrr7023bt3T2NjY375y1/mrbfeSpLMnDkzRx11VI488shcdtllSZKamppN+asEAGArVCqXy+W2XsTG1NzcnNra2jQ1NW21/0L90EMP5cgjj8xPf/rTnHTSSWuds3LlyixdujTdu3fPN7/5zZx//vlJkv79+2fPPffMz3/+83Xu/7zzzsu1116bvz50Zs2albq6unz3u9/NRRdd1DL+8ssvZ6+99sqXvvSlXHnllXnyySczaNCg3HPPPfn0pz+9zvf5yEc+kpNOOim33HLLenx6AAB414a0gUvsthJ/+tOfMmbMmOy5555p37592rdvn4985CNZsmRJnnnmmZZ5gwcPzn//93/nkksuyUMPPZQ///nP7/s97r///pRKpZx66qlZsWJFy2vnnXfOxz/+8Tz00ENJkj333DM77LBDxowZk+uvvz7z58/f2B8XAAA2iEDaSowePTr/8R//kTPOOCO/+MUvMnv27Pz617/OTjvt1CqCrrnmmowZMyb33HNPjjzyyHTp0iUnnnhifv/73//N93jttddSLpfTvXv3bLvttq1es2bNyhtvvJEkqa2tzcMPP5z9998/X/va17LffvulZ8+eGTduXJYvX16x3wEAAPwtvoO0FWhqasr999+fcePG5ZJLLmkZX7ZsWRYvXtxqbqdOnTJhwoRMmDAhr732WsvZpBNOOCHPPvvse75P165dUyqVMmPGjFRVVa3x53851r9///zXf/1XyuVynnrqqdxyyy25/PLL07Fjx1ZrBACATckZpK1AqVRKuVxeI1puuummrFy5cp3bde/ePaeffno+97nP5bnnnsvbb7+d5P9C568vvxs5cmTK5XJeeeWVDBo0aI1X//7917q2j3/84/ne976X7bffPnPmzGn5s6qqqvW6xA8AAD4oZ5C2AjU1NTnssMNy1VVXpWvXrundu3cefvjh3Hzzzdl+++1bzR0yZEhGjhyZAQMGZIcddsgzzzyT2267LXV1ddluu+2SpCV0rrzyyhx33HFp165dBgwYkKFDh+ass87KF77whTzxxBM57LDD0qlTpzQ0NOSRRx5J//7988UvfjH3339/Jk6cmBNPPDEf/ehHUy6Xc/fdd+fNN9/M8OHDW9bSv3//PPTQQ7nvvvvSo0ePdO7cOXvvvfcm+70BALD1EUhbiTvuuCNf/vKX89WvfjUrVqzI0KFDM3Xq1Bx//PGt5h111FG59957873vfS9vv/12dtlll5x22mm59NJLW+aMHj06jz76aCZOnJjLL7885XI5CxYsSO/evXPDDTfk4IMPzg033JCJEydm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O+20lvnnnHNOXnjhhVx00UV55pln8sMf/jA333xzvvKVr1RymQAAAEkqeIldkowaNSqLFi3K5ZdfnoaGhvTr1y+TJ0/O7rvvniRpaGho9UykPn36ZPLkybnwwgtz7bXXpmfPnrnmmmvy93//95VcJgAAQJIKPwepLXgOEgAAkHzInoMEAACwuRFIAAAABYEEAABQEEgAAAAFgQQAAFAQSAAAAAWBBAAAUBBIAAAABYEEAABQEEgAAAAFgQQAAFAQSAAAAAWBBAAAUBBIAAAABYEEAABQEEgAAAAFgQQAAFAQSAAAAAWBBAAAH3Knn356evfu3dbL2CoIJAAAgIJAAgAANppyuZw///nPbb2MDSaQAACgjS1cuDBnnXVWevXqlaqqquy0004ZOnRopk2bts5tli5dmrFjx6ZPnz7p0KFDdtlll5x77rl58803W+ZcfPHFqa2tzcqVK1vGvvSlL6VUKuWqq65qGVu0aFG22Wab/Pu//3vLWHNzc77yla+02v8FF1yQJUuWtFpHqVTKeeedl+uvvz777rtvqqqq8p//+Z8b4bfSNtq39QIAAGBrV19fnzlz5uRf//Vfs9dee+XNN9/MnDlzsmjRorXOL5fLOfHEEzN9+vSMHTs2hx56aJ566qmMGzcuM2fOzMyZM1NVVZVhw4blO9/5TmbPnp26urokybRp09KxY8dMnTo1F198cZJk+vTpKZfLGTZsWJLk7bffzuGHH56XX345X/va1zJgwID8z//8T77+9a/nt7/9baZNm5ZSqdSynnvuuSczZszI17/+9ey8887p1q1bhX9jlSOQAACgjT366KM544wzcuaZZ7aMffrTn17n/AceeCC/+MUv8u1vf7slcoYPH55evXpl1KhRufXWW3PmmWfm0EMPTYcOHTJt2rTU1dXllVdeybPPPpsxY8bkmmuuybJly1JVVZVp06alZ8+e2XfffZMk11xzTZ566qk8/vjjGTRoUJLk6KOPzi677JKTTjopU6ZMyXHHHdeynj/96U/57W9/mx122KESv55NyiV2AADQxgYPHpxbbrkl3/jGNzJr1qwsX778Pec/+OCDSd69u91f+uxnP5tOnTpl+vTpSZLtttsudXV1LZfqTZ06Ndtvv30uvvjivPPOO3nkkUeSvHtWafXZoyS5//77069fv+y///5ZsWJFy+uYY45JqVTK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780BBxyQ448/Pklyyimn5IADDsj1119fqWUCAAC0KJXL5XJbL2Jjam5uTm1tbZqamlJTU9PWywEAANrIhrRBxc4gAQAAbG4EEgAAQEEgAQAAFAQSAABAQSABAAAUBBIAAEBBIAEAABQEEgAAQEEgAQAAFAQSAABAQSABAAAUBBIAAEBBIAEAABQEEgAAQEEgAQAAFAQSAABAQSABAAAUBBIAAEBBIAEAABQEEgAAQEEgAQAAFAQSAABAQSABAAAUBBIAAEBBIAEAABQEEgAAQEEgAQAAFAQSAABAQSABAAAUBBIAAEBBIAEAABQEEgAAQEEgAQAAFAQSAABAQSABAAAUBBIAAEBBIAEAABQEEgAAQEEgAQAAFAQSAABAQSABAAAUBBLwvkyaNCn77bdfOnbsmFKplHnz5m20fU+ePDnjx4/faPsDANhQAgn4mxYuXJj6+vrssccemTJlSmbOnJm99tpro+1/8uTJmTBhwkbbHwDAhmrf1gsAPvx+97vfZfny5Tn11FNz+OGHt/Vy3re333472223XVsvAwDYjDiDBLyn008/PZ/4xCeSJKNGjUqpVMoRRxyRJ554Iqecckp69+6djh07pnfv3vnc5z6XF154odX2b7/9dr7yla+kT58+qa6uTpcuXTJo0KDceeedLfu/9tprkySlUqnl9fzzzydJyuVyJk6cmP333z8dO3bMDjvskJNOOin/+7//2+p9jjjiiPTr1y+/+tWvcsghh2S77bbLP/7jP1b4twMAbGmcQQLe02WXXZbBgwfn3HPPzTe/+c0ceeSRqampyfz587P33nvnlFNOSZcuXdLQ0JDrrrsuBx10UObPn5+uXbsmSS666KLcdttt+cY3vpEDDjggS5YsydNPP51Fixa17H/JkiX52c9+lpkzZ7a8b48ePZIkZ599dm655Zacf/75ufLKK7N48eJcfvnlOeSQQ/Kb3/wm3bt3b9mmoaEhp556ar761a/mm9/8ZrbZxt8BAQDrRyAB72mPPfZI3759kyQf+9jHcvDBBydJ+vbtm5NOOqll3sqVKzNy5Mh07949d9xxR84///wkyaOPPpoRI0bkwgsvbJl7/PHHt9r/6shZve/VZs2alR/84Af57ne/m4suuqhl/NBDD81ee+2Vf/u3f8uVV17ZMr548eL89Kc/zVFHHbWxPj4AsJXx16vABvnTn/6UMWPGZM8990z79u3Tvn37fOQjH8mSJUvyzDPPtMwbPHhw/vu//zuXXHJJHnroofz5z39+3+9x//33p1Qq5dRTT82KFStaXjvvvHM+/vGP56GHHmo1f4cddhBHAMAH4gwSsEFGjx6d6dOn57LLLstBBx2UmpqalEqlfPKTn2wVQddcc0123XXXTJo0KVdeeWWqq6tzzDHH5KqrrsrHPvax93yP1157LeVyudVldH/pox/9aKufV1+WBwCwoQQSsN6amppy//33Z9y4cbnkkktaxpctW5bFixe3mtupU6dMmDAhEyZMyGuvvdZyNumEE07Is88++57v07Vr15RKpcyYMSNVVVVr/Plfj5VKpQ/wqQAABBKwAUqlUsrl8hqBctNNN2XlypXr3K579+45/fTT85vf/CZXX311y224V+/nz3/+czp27Ngyf+TIkfnWt76VV155JSeffHJlPgwAwF8QSMB6q6mpyWGHHZarrroqXbt2Te/evfPwww/n5ptvzvbbb99q7pAhQzJy5MgMGDAgO+ywQ5555pncdtttqaura3lGUf/+/ZMkV155ZY477ri0a9cuAwYMyNChQ3PWWWflC1/4Qp544okcdthh6dSpUxoaGvLII4+kf//++eIXv7ipPz4AsAUTSMAGueOOO/LlL385X/3qV7NixYoMHTo0U6dObXWHuiQ56qijcu+99+Z73/te3n777eyyyy457bTTcumll7bMGT16dB599NFMnDgxl19+ecrlchYsWJDevXvnhhtuyMEHH5wbbrghEydOzKpVq9KzZ88MHTo0gwcP3tQfGwDYwpXK5XK5rRexMTU3N6e2tjZNTU2pqalp6+UAAABtZEPawG2+AQAACgIJAACgIJAAAAAKAgkAAKDgLnbAGlauKmf2gsV5/a2l6da5OoP7dEm7bTyEFQDY8gkkoJUpTzdkwn3z09C0tGWsR211xp3QN8f269GGKwMAqDyX2AEtpjzdkC/ePqdVHCVJY9PSfPH2OZnydEMbrQwAYNMQSECSdy+rm3Df/KztwWirxybcNz8rV21Rj04DAGhFIAFJktkLFq9x5ugvlZM0NC3N7AWLN92iAAA2MYEEJElef2vdcbQh8wAANkcCCUiSdOtcvVHnAQBsjgQSkCQZ3KdLetRWZ1038y7l3bvZDe7TZVMuCwBgkxJIQJKk3TaljDuhb5KsEUmrfx53Ql/PQwIAtmgCCWhxbL8eue7UA7NzbevL6Haurc51px7oOUgAwBbPg2KBVo7t1yPD++6c2QsW5/W3lqZb53cvq3PmCADYGggkYA3ttimlbo8d23oZAACbnEvsAAAACgIJAACgIJAAAAAKAgkAAKAgkAAAAAoCCQAAoCCQAAAACgIJAACgIJAAAAAKAgkAAKAgkAAAAAoCCQAAoCCQAAAACgIJAACgIJAAAAAKAgkAAKAgkAAAAAoCCQAAoCCQAAAACgIJAACgIJAAAAAKFQukP/7xj6mvr09tbW1qa2tTX1+fN998c53zly9fnjFjxqR///7p1KlTevbsmdNOOy2vvvpqpZYIAADQSsUCafTo0Zk3b16mTJmSKVOmZN68eamvr1/n/Lfffjtz5szJZZddljlz5uTuu+/O7373u3zqU5+q1BIBAABaKZXL5fLG3ukzzzyTvn37ZtasWRkyZEiSZNasWamrq8uzzz6bvffe+33t59e//nUGDx6cF154Ibvtttv72qa5uTm1tbVpampKTU3NBn8GAABg87YhbVCRM0gzZ85MbW1tSxwlycEHH5za2to89thj73s/TU1NKZVK2X777dc5Z9myZWlubm71AgAA2BAVCaTGxsZ069ZtjfFu3bqlsbHxfe1j6dKlueSSSzJ69Oj3rL0rrrii5XtOtbW16dWr1wavGwAA2LqtVyCNHz8+pVLpPV9PPPFEkqRUKq2xfblcXuv4X1u+fHlOOeWUrFq1KhMnTnzPuWPHjk1TU1PL66WXXlqfjwQAANCi/fpMPu+883LKKae855zevXvnqaeeymuvvbbGny1cuDDdu3d/z+2XL1+ek08+OQsWLMiDDz74N68VrKqqSlVV1d9ePAAAwN+wXoHUtWvXdO3a9W/Oq6urS1NTU2bPnp3BgwcnSR5//PE0NTXlkEMOWed2q+Po97//fX75y19mxx13XJ/lAQAAfCAV+Q7Svvvum2OPPTZnnnlmZs2alVmzZuXMM8/MyJEjW93Bbp999snPf/7zJMmKFSty0kkn5YknnsiPf/zjrFy5Mo2NjWlsbMw777xTiWUCAAC0UrHnIP34xz9O//79M2LEiIwYMSIDBgzIbbfd1mrOc889l6ampiTJyy+/nHvvvTcvv/xy9t9///To0aPltT53vgMAANhQFXkOUlvyHCQAACD5ED0HCQAAYHMkkAAAAAoCCQAAoCCQAAAACgIJAABoE6effnp69+7d1stoRSABAAAUBBIAAEBBIAEAABWxcOHCnHXWWenVq1eqqqqy0047ZejQoZk2bdo6t1m6dGnGjh2bPn36pEOHDtlll11y7rnn5s0332yZc/HFF6e2tjYrV65sGfvSl76UUqmUq666qmVs8eLFSZIbbrjhfa9ZIAEAABVRX1+fe+65J1//+tfzwAMP5KabbsqwYcOyaNGitc4vl8s58cQT853vfCf19fX5f//v/+Wiiy7Kf/7nf+aoo47KsmXLkiTDhg1Lc3NzZs+e3bLttGnT0rFjx0ydOrVl7KGHHkqSHHHEEe97ze3X/2MCAAD8bY8++mjOOOOMnHnmmS1jn/70p9c5/4EHHsgvfvGLfPvb387FF1+cJBk+fHh69eqVUaNG5dZbb82ZZ56ZQw89NB06dMi0adNSV1eXV155Jc8++2zGjBmTa665JsuWLUtVVVVLIO29997ve83OIAEAABUxePDg3HLLLfnGN76RWbNmZfny5e85/8EHH0zy7t3t/tJnP/vZdOrUKdOnT0+SbLfddqmrq2u5VG/q1KnZfvvtc/HFF+edd97JI488kuT/ziCtD4EEAABUxKRJk/L5z38+N910U+rq6tKlS5ecdtppaWxsXOv8RYsWpX379tlpp51ajZdKpey8886tLs0bNmxYZs2alSVLlmTatGk56qijsuOOO2bgwIGZNm1aFixYkBdeeGG91yyQAACAiujatWuuvvrqPP/883nhhRdyxRVX5O67717jDNFqO+64Y1asWJGFCxe2Gi+Xy2lsbEzXrl1bxo4++ui88847+dWvfpXp06dn+PDhLeNTp05t9V2k9SGQAACAitttt91y3nnnZfjw4ZkzZ85a5xx99NFJkttvv73V+F133ZUlS5a0/Hny7uV7NTU1ufrqq9PY2NgSSMOGDcvcuXPzk5/8JPvss896r9NNGgAAgI2uqakpRx55ZEaPHp199tknnTt3zq9//etMmTIln/nMZ9a6zfDhw3PMMcdkzJgxaW5uztChQ/PUU09l3LhxOeCAA1JfX98yt127djn88MNz3333pU+fPtljjz2SJEOHDk1VVVWmT5+ec845J88+++x6rdsZJAAAYKOrrq7OkCFDctttt+Uf/uEfctxxx+Wmm27KmDFj8oMf/GCt25RKpdxzzz256KKL8qMf/Sif/OQnW275/eCDD6aqqqrV/GHDhrX6zySpqqrKJz7xiSTrd3vvljWUy+Xyem/1Idbc3Jza2to0NTWlpqamrZcDAAC0kQ1pA2eQAAAACgIJAACgIJAAAAAKAgkAAKDgNt8AAMBGsXJVObMXLM7rby1Nt87VGdynS9ptU2rrZa0XgQQAAHxgU55uyIT75qehaWnLWI/a6ow7oW+O7dejDVe2flxiBwAAfCBTnm7IF2+f0yqOkqSxaWm+ePucTHm6oY1Wtv4EEgAAsMFWripnwn3zs7aHq64em3Df/KxctXk8flUgAQAAG2z2gsVrnDn6S+UkDU1LM3vB4k23qA9AIAEAABvs9bfWHUcbMq+tCSQAAGCDdetcvVHntTWBBAAAbLDBfbqkR2111nUz71LevZvd4D5dNuWyNphAAgAANli7bUoZd0LfJFkjklb/PO6EvpvN85AEEgAA8IEc269Hrjv1wOxc2/oyup1rq3PdqQduVs9B8qBYAADgAzu2X48M77tzZi9YnNffWppund+9rG5zOXO0mkACAAA2inbblFK3x45tvYwPxCV2AAAABYEEAABQEEgAAAAFgQQAAFAQSAAAAAWBBAAAUBBIAAAABYEEAABQEEgAAAAFgQQAAFAQSAAAAAWBBAAAUBBIAAAABYEEAABQEEgAAAAFgQQAAFAQSAAAAAWBBAAAUBBIAAAABYEEAABQEEgAAAAFgQQAAFAQSAAAAAWBBAAAUBBIAAAABYEEAABQEEgAAAAFgQQAAFAQSAAAAAWBBAAAUBBIAAAABYEEAABQEEgAAAAFgQQAAFAQSAAAAAWBtAlNmjQp++23Xzp27JhSqZR58+ZttH1Pnjw548eP32j7AwCArZFA2kQWLlyY+vr67LHHHpkyZUpmzpyZvfbaa6Ptf/LkyZkwYcJG2x8AAGyN2rf1ArYWv/vd77J8+fKceuqpOfzww9t6OQAAwFo4g7QJnH766fnEJz6RJBk1alRKpVKOOOKIPPHEEznllFPSu3fvdOzYMb17987nPve5vPDCC622f/vtt/OVr3wlffr0SXV1dbp06ZJBgwblzjvvbNn/tddemyQplUotr+eff36Tfk4AANjcOYO0CVx22WUZPHhwzj333Hzzm9/MkUcemZqamsyfPz977713TjnllHTp0iUNDQ257rrrctBBB2X+/Pnp2rVrkuSiiy7Kbbfdlm984xs54IADsmTJkjz99NNZtGhRy/6XLFmSn/3sZ5k5c2bL+/bo0aNNPi8AAGyuBNImsMcee6Rv375Jko997GM5+OCDkyR9+/bNSSed1DJv5cqVGTlyZLp375477rgj559/fpLk0UcfzYgRI3LhhRe2zD3++ONb7b979+5J0rJvAABg/bnErg396U9/ypgxY7Lnnnumffv2ad++fT7ykY9kyZIleeaZZ1rmDR48OP/93/+dSy65JA899FD+/Oc/t+GqAQBgy+UMUhsaPXp0pk+fnssuuywHHXRQampqUiqV8slPfrJVBF1zzTXZddddM2nSpFx55ZWprq7OMccck6uuuiof+9jH2vATAADAlsUZpDbS1NSU+++/P1/96ldzySWX5Oijj85BBx2U/v37Z/Hixa3mdurUKRMmTMizzz6bxsbGXHfddZk1a1ZOOOGENlo9AABsmQRSGymVSimXy6mqqmo1ftNNN2XlypXr3K579+45/fTT87nPfS7PPfdc3n777SRp2Y/L7wAAYMO5xK6N1NTU5LDDDstVV12Vrl27pnfv3nn44Ydz8803Z/vtt281d8iQIRk5cmQGDBiQHXbYIc8880xuu+221NXVZbvttkuS9O/fP0ly5ZVX5rjjjku7du0yYMCAdOjQYVN/NAAA2GwJpDZ0xx135Mtf/nK++tWvZsWKFRk6dGimTp3a6g51SXLUUUfl3nvvzfe+9728/fbb2WWXXXLaaafl0ksvbZkzevToPProo5k4cWIuv/zylMvlLFiwIL17997EnwoAADZfpXK5XG7rRWxMzc3Nqa2tTVNTU2pqatp6OQAAQBvZkDbwHSQAAICCQAIAACgIJAAAgIKbNFTQylXlzF6wOK+/tTTdOldncJ8uabdNqa2XBQAArINAqpApTzdkwn3z09C0tGWsR211xp3QN8f269GGKwMAANbFJXYVMOXphnzx9jmt4ihJGpuW5ou3z8mUpxvaaGUAAMB7EUgb2cpV5Uy4b37Wdu/01WMT7puflau2qLurAwDAFkEgbWSzFyxe48zRXyonaWhamtkLFm+6RQEAAO+LQNrIXn9r3XG0IfMAAIBNRyBtZN06V2/UeQAAwKYjkDaywX26pEdtddZ1M+9S3r2b3eA+XTblsgAAgPehYoH0xz/+MfX1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",
      "text/plain": [
       "<Figure size 1000x1000 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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9O/fP3fccUcOOeSQll4eAABroVQul8stvYgNadGiRamqqkptbW06derU0suBZlO3opxpsxZm3uIl6daxMgNrOqd1q9KHbwgAsInanNrAGTvYBEx+Zk7GTJqZObVL6sd6VFVm1FH9Mrx/jxZcGQAAzcHNU6DgJj8zJ2ffML1B1CXJ3NolOfuG6Zn8zJwWWhkAAM2lycNu3LhxqampSWVlZQYMGJCHH374A+cvXbo0l156aXr16pWKior06dOn/oYOQEN1K8oZM2lmVnU99cqxMZNmpm7FJnXFNQAA79Okl2JOnDgx559/fsaNG5chQ4bk6quvzmGHHZaZM2emZ8+eq9zmhBNOyKuvvpprrrkmH/3oRzNv3rwsX768KZcJhTVt1sJGZ+req5xkTu2STJu1MIP7dFntPAAAiq1Jw+6KK67IGWeckc997nNJkiuvvDJ33XVXxo8fn8svv7zR/MmTJ+ehhx7K888/n86dOydJevfu3ZRLhEKbt3j1Ubcu8wAAKKYmuxTznXfeyZNPPtnotumHHHJIHn300VVuc8cdd2TvvffO2LFjs+2226Zv37758pe/nLfffnu1v2fp0qVZtGhRgxdsLrp1rNyg8wAAKKYmO2M3f/781NXVpXv37g3Gu3fvnrlz565ym+effz6PPPJIKisrc/vtt2f+/Pk555xzsnDhwtV+z+7yyy/PmDFjNvj6oQgG1nROj6rKzK1dssrv2ZWSVFe9++gDAAA2XU1+85RSqeFztMrlcqOxlVasWJFSqZQbb7wxAwcOzOGHH54rrrgi119//WrP2l1yySWpra2tf7300ksb/DPAxqp1q1JGHdUvybsR914r3486qp/n2QEAbOKaLOy6du2a1q1bNzo7N2/evEZn8Vbq0aNHtt1221RVVdWP7bLLLimXy3n55ZdXuU1FRUU6derU4AWbk+H9e2T8SXuluqrh5ZbVVZUZf9JenmMHALAZaLJLMdu1a5cBAwbknnvuyTHHHFM/fs899+STn/zkKrcZMmRIbr755rzxxhvZcsstkyR/+9vf0qpVq2y33XZNtVQovOH9e2RYv+pMm7Uw8xYvSbeO715+6UwdAMDmoUkvxbzgggvys5/9LNdee22effbZfOlLX8qLL76Ys846K8m7l1GefPLJ9fNHjBiRLl265LTTTsvMmTPz3//93/nKV76S008/Pe3bt2/KpULhtW5VyuA+XfLJPbfN4D5dRB0AwGakSR93cOKJJ2bBggW57LLLMmfOnPTv3z933nlnevXqlSSZM2dOXnzxxfr5W265Ze655578n//zf7L33nunS5cuOeGEE/Ktb32rKZcJAABQaKVyubyqm+kV1qJFi1JVVZXa2lrftwMAgM3Y5tQGTX5XTAAAAJqWsAMAACg4YQcAAFBwwg4AAKDghB0AAEDBCTsAAICCE3YAAAAFJ+wAAAAKTtgBAAAUnLADAAAoOGEHAABQcMIOAACg4IQdAABAwQk7AACAghN2AAAABSfsAAAACk7YAQAAFJywAwAAKDhhBwAAUHDCDgAAoOCEHQAAQMEJOwAAgIITdgAAAAUn7AAAAApO2AEAABScsAMAACg4YQcAAFBwwg4AAKDghB0AAEDBCTsAAICCE3YAAAAFJ+wAAAAKTtgBAAAUnLADAAAoOGEHAABQcMIOAACg4IQdAABAwQk7AACAghN2AAAABSfsAAAACk7YAQAAFJywAwAAKDhhBwAAUHDCDgAAoOCEHQAAQMEJOwAAgIITdgAAAAUn7AAAAApO2AEAABScsAMAACg4YQcAAFBwwg4AAKDghB0AAEDBCTsAAICCE3YAAAAFJ+wAAAAKTtgBAAAUnLADAAAoOGEHAABQcMIOAACg4IQdAABAwQk7AACAghN2AAAABSfsAAAACk7YAQAAFJywAwAAKDhhBwAAUHDCDgAAoOCEHQAAQMEJOwAAgIITdgAAAAUn7AAAAApO2AEAABScsAMAACg4YQcAAFBwwg4AAKDghB0AAEDBCTsAAICCE3YAAAAFJ+wAAAAKTtgBAAAUnLADAAAoOGEHAABQcMIOAACg4IQdAABAwQk7AACAghN2AAAABSfsAAAACk7YAQAAFJywAwAAKDhhBwAAUHDCDgAAoOCEHQAAQMEJOwAAgIITdgAAAAUn7AAAAApO2AEAABScsAMAACg4YQcAAFBwwg4AAKDghB0AAEDBCTsAAICCE3YAAJugBx98MKVSKbfccktLL2WNzJ49O6VSKddff31LLwUKqU1LLwAAAHr06JEpU6akT58+Lb0UKCRhBwBAi6mrq8vy5ctTUVGRffbZp6WXA4XlUkwAgI3Ia6+9li984QvZfvvtU1FRka233jpDhgzJvffemyTp3bt3Tj311EbbDR06NEOHDm00vmTJklxwwQWprq5O+/bts//++2fGjBkN5px66qnZcsst89xzz+XQQw9Nhw4d0qNHj3znO99JkkydOjUf//jH06FDh/Tt2zc///nPG635nHPOSb9+/bLlllumW7duOfDAA/Pwww83mLfycsuxY8fmW9/6VmpqalJRUZEHHnhglZdijh49OqVSKX/5y1/ymc98JlVVVenevXtOP/301NbWNth3uVzOuHHjsueee6Z9+/bZaqutcvzxx+f5559f0z96KDRn7AAANiIjR47M9OnT8+///u/p27dv/vnPf2b69OlZsGDBOu3v3/7t37LXXnvlZz/7WWprazN69OgMHTo0M2bMyA477FA/b9myZTn22GNz1lln5Stf+Up+9atf5ZJLLsmiRYty66235qKLLsp2222XH//4xzn11FPTv3//DBgwIEmycOHCJMmoUaNSXV2dN954I7fffnuGDh2a++67r1FwXnXVVenbt2++//3vp1OnTtlxxx0/8DMcd9xxOfHEE3PGGWfkz3/+cy655JIkybXXXls/58wzz8z111+f8847L9/97nezcOHCXHbZZdl3333zpz/9Kd27d1+nPz8ojPImpra2tpykXFtb29JLAQBYa1tuuWX5/PPPX+3Pe/XqVT7llFMaje+///7l/fffv/79Aw88UE5S3muvvcorVqyoH589e3a5bdu25c997nP1Y6eccko5SfnWW2+tH1u2bFl56623LicpT58+vX58wYIF5datW5cvuOCC1a5x+fLl5WXLlpUPOuig8jHHHFM/PmvWrHKScp8+fcrvvPNOg21W/uy6666rHxs1alQ5SXns2LEN5p5zzjnlysrK+s81ZcqUcpLyD37wgwbzXnrppXL79u3LX/3qV1e7VjZtm1MbOGMHALARGThwYK6//vp06dIlBx98cAYMGJC2bduu8/5GjBiRUqlU/75Xr17Zd99988ADDzSYVyqVcvjhh9e/b9OmTT760Y+mTZs2+Zd/+Zf68c6dO6dbt2554YUXGmw/YcKE/PSnP83MmTOzdOnS+vGdd9650ZqOPvrotfpMRx99dIP3u+++e5YsWZJ58+ale/fu+d3vfpdSqZSTTjopy5cvr59XXV2dPfbYIw8++OAa/y4oKt+xAwDYiEycODGnnHJKfvazn2Xw4MHp3LlzTj755MydO3ed9lddXb3Ksfdf2rnFFluksrKywVi7du3SuXPnRtu3a9cuS5YsqX9/xRVX5Oyzz86gQYNy6623ZurUqXn88cczfPjwvP32242279Gjx1p9hi5dujR4X1FRkST1+3711VdTLpfTvXv3tG3btsFr6tSpmT9//lr9PigiZ+wAADYiXbt2zZVXXpkrr7wyL774Yu64445cfPHFmTdvXiZPnpzKysoGZ8RWmj9/frp27dpofFVBOHfu3EaxtD5uuOGGDB06NOPHj28wvnjx4lXOf+8ZxA2ha9euKZVKefjhh+uj771WNQabGmfsAAA2Uj179sy5556bYcOGZfr06UnevSvm008/3WDe3/72t/z1r39d5T5+/etfp1wu179/4YUX8uijj67yDprrqlQqNYqnp59+OlOmTNlgv+ODHHnkkSmXy/nHP/6Rvffeu9Frt912a5Z1QEtyxg4AYCNRW1ubAw44ICNGjMjOO++cjh075vHHH8/kyZNz7LHHJnn3rpknnXRSzjnnnBx33HF54YUXMnbs2Gy99dar3Oe8efNyzDHH5POf/3xqa2szatSoVFZW1t9ZckM48sgj881vfjOjRo3K/vvvn7/+9a+57LLLUlNT0+A7b01lyJAh+cIXvpDTTjstTzzxRD7xiU+kQ4cOmTNnTh555JHstttuOfvss5t8HdCShB0AwEaisrIygwYNyi9/+cvMnj07y5YtS8+ePXPRRRflq1/9apJ3b4byyiuvZMKECbnuuuvSv3//jB8/PmPGjFnlPr/97W/n8ccfz2mnnZZFixZl4MCBuemmm9KnT58Ntu5LL700b731Vq655pqMHTs2/fr1y4QJE3L77bc3241Lrr766uyzzz65+uqrM27cuKxYsSLbbLNNhgwZkoEDBzbLGqAllcrvPTe/CVi0aFGqqqpSW1ubTp06tfRyAACAFrI5tYEzdgAALahuRTnTZi3MvMVL0q1jZQbWdE7rVhv25iLApk/YAQC0kMnPzMmYSTMzp/b/PTqgR1VlRh3VL8P7r90jAYDNm7tiAgC0gMnPzMnZN0xvEHVJMrd2Sc6+YXomPzOnhVYGFJGwAwBoZnUryhkzaWZWdaODlWNjJs1M3YpN6lYIQBMSdgAAzWzarIWNztS9VznJnNolmTZrYfMtCii0Jg+7cePGpaamJpWVlRkwYEAefvjhNdruj3/8Y9q0aZM999yzaRcIANDM5i1efdStyzyAJg27iRMn5vzzz8+ll16aGTNmZL/99sthhx2WF1988QO3q62tzcknn5yDDjqoKZcHANAiunWs3KDzAJo07K644oqcccYZ+dznPpdddtklV155ZbbffvuMHz/+A7c788wzM2LEiAwePLgplwcA0CIG1nROj6rKrO6hBqW8e3fMgTWdm3NZQIE1Wdi98847efLJJ3PIIYc0GD/kkEPy6KOPrna76667Lv/7v/+bUaNGrdHvWbp0aRYtWtTgBQCwMWvdqpRRR/VLkkZxt/L9qKP6eZ4dsMaaLOzmz5+furq6dO/evcF49+7dM3fu3FVu8/e//z0XX3xxbrzxxrRps2aP2Lv88stTVVVV/9p+++3Xe+0AAE1teP8eGX/SXqmuani5ZXVVZcaftJfn2AFrpckfUF4qNfyXpnK53GgsSerq6jJixIiMGTMmffv2XeP9X3LJJbngggvq3y9atEjcAQCFMLx/jwzrV51psxZm3uIl6dbx3csvnakD1laThV3Xrl3TunXrRmfn5s2b1+gsXpIsXrw4TzzxRGbMmJFzzz03SbJixYqUy+W0adMmd999dw488MBG21VUVKSioqJpPgQAQBNr3aqUwX26tPQygIJrsksx27VrlwEDBuSee+5pMH7PPfdk3333bTS/U6dO+fOf/5ynnnqq/nXWWWdlp512ylNPPZVBgwY11VIBAAAKrUkvxbzgggsycuTI7L333hk8eHB++tOf5sUXX8xZZ52V5N3LKP/xj3/kF7/4RVq1apX+/fs32L5bt26prKxsNA4AAMD/06Rhd+KJJ2bBggW57LLLMmfOnPTv3z933nlnevXqlSSZM2fOhz7TDgAAgA9WKpfL5ZZexIa0aNGiVFVVpba2Np06dWrp5QAAAC1kc2qDJn1AOQAAAE1P2AEAABScsAMAACg4YQcAAFBwwg4AAKDghB0AAEDBCTsAAICCE3YAAAAFJ+wAAAAKTtgBAAAUnLADAAAoOGEHAABQcMIOAACg4IQdAABAwQk7AACAghN2AAAABSfsAAAACk7YAQAAFJywAwAAKDhhBwAAUHDCDgAAoOCEHQAAQMEJOwAAgIITdgAAAAUn7AAAAApO2AEAABScsAMAACg4YQcAAFBwwg4AAKDghB0AAEDBCTsAAICCE3YAAAAFJ+wAAAAKTtgBAAAUnLADAAAoOGEHAABQcMIOAACg4IQdAABAwQk7AACAghN2AAAABSfsAAAACk7YAQAAFJywAwAAKDhhBwAAUHDCDgAAoOCEHQAAQMEJOwAAgIITdgAAAAUn7AAAAApO2AEAABScsAMAACg4YQcAAFBwwg4AAKDghB0AAEDBCTsAAICCE3YAAAAFJ+wAAAAKTtgBAAAUnLADAAAoOGEHAABQcMIOAACg4IQdAABAwQk7AACAghN2AAAABSfsAAAACk7YAQAAFJywAwAAKDhhBwAAUHDCDgAAoOCEHQAAQMEJOwAAgIITdgAAAAUn7AAAAApO2AEAABScsAMAACg4YQcAAFBwwg4AAKDghB0AAEDBCTsAAICCE3YAAAAFJ+wAAAAKTtgBAAAUnLADAAAoOGEHAABQcMIOAACg4IQdAABAwQk7AACAghN2AAAABSfsAAAACk7YAQAAFJywAwAAKDhhBwAAUHDCDgAAoOCEHQAAQMEJOwAAgIITdgAAAAUn7AAAAApO2AEAABScsAMAACg4YQcAAFBwwg4AAKDghB0AAEDBCTsAAICCE3YAAAAFJ+wAAAAKTtgBAAAUnLADAAAoOGEHAABQcMIOAACg4IQdAABAwQk7AACAghN2AAAABSfsAAAACk7YAQAAFJywAwAAKDhhBwAAUHDCDgAAoOCEHQAAQMEJOwAAgIITdgAAAAUn7AAAAAquycNu3LhxqampSWVlZQYMGJCHH354tXNvu+22DBs2LFtvvXU6deqUwYMH56677mrqJQIAABRak4bdxIkTc/755+fSSy/NjBkzst9+++Wwww7Liy++uMr5//3f/51hw4blzjvvzJNPPpkDDjggRx11VGbMmNGUywQAACi0UrlcLjfVzgcNGpS99tor48ePrx/bZZdd8qlPfSqXX375Gu1j1113zYknnphvfOMbazR/0aJFqaqqSm1tbTp16rRO6wYAAIpvc2qDJjtj98477+TJJ5/MIYcc0mD8kEMOyaOPPrpG+1ixYkUWL16czp07r3bO0qVLs2jRogYvAACAzUmThd38+fNTV1eX7t27Nxjv3r175s6du0b7+MEPfpA333wzJ5xwwmrnXH755amqqqp/bb/99uu1bgAAgKJp8punlEqlBu/L5XKjsVX59a9/ndGjR2fixInp1q3bauddcsklqa2trX+99NJL671mAACAImnTVDvu2rVrWrdu3ejs3Lx58xqdxXu/iRMn5owzzsjNN9+cgw8++APnVlRUpKKiYr3XCwAAUFRNdsauXbt2GTBgQO65554G4/fcc0/23Xff1W7361//Oqeeemp+9atf5Ygjjmiq5QEAAGwymuyMXZJccMEFGTlyZPbee+8MHjw4P/3pT/Piiy/mrLPOSvLuZZT/+Mc/8otf/CLJu1F38skn50c/+lH22Wef+rN97du3T1VVVVMuFQAAoLCaNOxOPPHELFiwIJdddlnmzJmT/v37584770yvXr2SJHPmzGnwTLurr746y5cvzxe/+MV88YtfrB8/5ZRTcv311zflUgEAAAqrSZ9j1xI2p2dVAAAAq7c5tUGT3xUTAACApiXsAAAACk7YAQAAFJywAwAAKDhhBwAAUHDCDgAAoOCEHQAAQMEJOwAAgIITdgAAAAUn7AAAAApO2AEAABScsAMAACg4YQcAAFBwwg4AAKDghB0AAEDBCTsAAICCE3YAAAAFJ+wAAAAKTtgBAAAUnLADAAAoOGEHAABQcMIOAACg4IQdAABAwQk7AACAghN2AAAABSfsAAAACk7YAQAAFJywAwAAKDhhBwAAUHDCDgAAoOCEHQAAQMEJOwAAgIITdgAAAAUn7AAAAApO2AEAABScsAMAACg4YQcAAFBwwg4AAKDghB0AAEDBCTsAAICCE3YAAAAFJ+wAAAAKTtgBAAAUnLADAAAoOGEHAABQcMIOAACg4IQdAABAwQk7AACAghN2AAAABSfsAAAACk7YAQAAFJywAwAAKDhhBwAAUHDCDgAAoOCEHQAAQMEJOwAAgIITdgAAAAUn7AAAAApO2AEAABScsAMAACg4YQcAAFBwwg4AAKDghB0AAEDBCTsAAICCE3YAAAAFJ+wAAAAKTtgBAAAUnLADAAAoOGEHAABQcMIOAACg4IQdAABAwQk7AACAghN2AAAABSfsAAAACk7YAQAAFJywAwAAKDhhBwAAUHDCDgAAoOCEHQAAQMEJOwAAgIITdgAAAAUn7AAAAApO2AEAABScsAMAACg4YQcAAFBwwg4AAKDghB0AAEDBCTsAAICCE3YAAAAFJ+wAAAAKTtgBAAAUnLADAAAoOGEHAABQcMIOAACg4IQdAABAwQk7AACAghN2AAAABSfsAAAACk7YAQAAFJywAwAAKDhhBwAAUHDCDgAAoOCEHQAAQMEJOwAAgIITdgAAAAUn7AAAAApO2AEAABScsAMAACg4YQcAAFBwwg4AAKDghB0AAEDBCTsAAICCE3YAAAAFJ+wAAAAKTtgBAAAUnLADAAAoOGEH8H+NHj06pVIp8+fP/8B5Q4cOzdChQzfI7wIA2BDatPQCAIpm3LhxLb0EAIAGhB3AWurXr9+Hzqmrq8vy5ctTUVHRDCsCADZ3LsUEeJ+XXnopxx57bDp16pSqqqqcdNJJee211+p//v5LMWfPnp1SqZSxY8fmW9/6VmpqalJRUZEHHnggSfL73/8+e+65ZyoqKlJTU5Pvf//7zf2RAIBNnDN2AO9zzDHH5IQTTshZZ52Vv/zlL/n617+emTNn5rHHHkvbtm1Xu91VV12Vvn375vvf/346deqUHXfcMffdd18++clPZvDgwbnppptSV1eXsWPH5tVXX23GTwQAbOqa/IzduHHjUlNTk8rKygwYMCAPP/zwB85/6KGHMmDAgFRWVmaHHXbIhAkTmnqJAA0ce+yxGTt2bA455JB86Utfyk9/+tPMmDEjv/nNbz5wu8rKytx111057rjjMmzYsPTu3TuXXnppunfvnnvuuSfHHHNMjj/++Nx333154403munTAACbgyYNu4kTJ+b888/PpZdemhkzZmS//fbLYYcdlhdffHGV82fNmpXDDz88++23X2bMmJF/+7d/y3nnnZdbb721KZcJ0MBnP/vZBu9POOGEtGnTpv7SytU5+uijG5zRe/PNN/P444/n2GOPTWVlZf14x44dc9RRR23YRQMAm7UmDbsrrrgiZ5xxRj73uc9ll112yZVXXpntt98+48ePX+X8CRMmpGfPnrnyyiuzyy675HOf+1xOP/30D/w+ytKlS7No0aIGL4D1UV1d3eB9mzZt0qVLlyxYsOADt+vRo0eD96+//npWrFjRaH+r+h0AAOujycLunXfeyZNPPplDDjmkwfghhxySRx99dJXbTJkypdH8Qw89NE888USWLVu2ym0uv/zyVFVV1b+23377DfMBgM3W3LlzG7xfvnx5FixYkC5dunzgdu9/Lt1WW22VUqnUaH+r+h0AAOujycJu/vz5qaurS/fu3RuMd+/efbX/QTN37txVzl++fPlqHxh8ySWXpLa2tv710ksvbZgPAGy2brzxxgbvf/Ob32T58uVr/VDyDh06ZODAgbntttuyZMmS+vHFixdn0qRJG2KpAABJmuGumO//F+xyudxo7MPmr2p8pYqKCs+JAjao2267LW3atMmwYcPq74q5xx575IQTTljrfX3zm9/M8OHDM2zYsFx44YWpq6vLd7/73XTo0CELFy5sgtUDAJujJjtj17Vr17Ru3brR2bl58+Y1Oiu3UnV19Srnr/x+C0BzuO222/Lcc8/l2GOPzTe+8Y0cddRRufvuu9OuXbu13tewYcPy29/+NosWLcqJJ56YCy64IMcdd1xOP/30Jlg5ALC5KpVXnhJrAoMGDcqAAQMybty4+rF+/frlk5/8ZC6//PJG8y+66KJMmjQpM2fOrB87++yz89RTT2XKlClr9DsXLVqUqqqq1NbWplOnTuv/IQAAgELanNqgSe+KecEFF+RnP/tZrr322jz77LP50pe+lBdffDFnnXVWkne/H3fyySfXzz/rrLPywgsv5IILLsizzz6ba6+9Ntdcc02+/OUvN+Uygc1U3YpypvzvgvzXU//IlP9dkLoVTfbvXAAATapJv2N34oknZsGCBbnssssyZ86c9O/fP3feeWd69eqVJJkzZ06DZ9rV1NTkzjvvzJe+9KX85Cc/yTbbbJOrrroqxx13XFMuE9gMTX5mTsZMmpk5tf/vpiY9qioz6qh+Gd6/xwdsCQCw8WnSSzFbwuZ0uhVYN5OfmZOzb5ie9/+P38pbNI0/aS9xBwCbgM2pDZr0UkyAjU3dinLGTJrZKOqS1I+NmTTTZZkAQKEIO2CzMm3WwgaXX75fOcmc2iWZNsujCACA4hB2wGZl3uLVR926zAMA2BgIO2Cz0q1j5QadBwCwMRB2wGZlYE3n9KiqrL9RyvuV8u7dMQfWdG7OZQEArBdhB2xWWrcqZdRR/ZKkUdytfD/qqH5p3Wp16QcAsPERdsBmZ3j/Hhl/0l6prmp4uWV1VaVHHQAAhdSkDygH2FgN798jw/pVZ9qshZm3eEm6dXz38ktn6gCAIhJ2wGardatSBvfp0tLLAABYby7FBAAAKDhhBwAAUHDCDgAAoOCEHQAAQMEJOwAAgIITdgAAAAUn7AAAAApO2AEAABScsAMAACg4YQcAAFBwwg4AAKDghB0AAEDBCTsAAICCE3YAAAAFJ+wAAAAKTtgBAAAUnLADAAAoOGEHAABQcMIOAACg4IQdAABAwQk7AACAghN2AAAABSfsAAAACk7YAQAAFJywAwAAKDhhBwAAUHDCDgAAoOCEHQAAQMEJOwAAgIITdgAAAAUn7AAAAApO2AEAABScsAMAACg4YQcAAFBwwg4AAKDghB0AAEDBCTsAAICCE3YAAAAFJ+wAAAAKTtgBAAAUnLADAAAoOGEHAABQcMIOAACg4IQdAABAwQk7AACAghN2AAAABSfsAAAACk7YAQAAFJywAwAAKDhhBwAAUHDCDgAAoOCEHQAAQMEJOwAAgIITdgAAAAUn7AAAAApO2AEAABScsAMAAJrE6NGjUyqVMn/+/A2yv1NPPTW9e/duMNa7d++ceuqpG2T/62PmzJkZPXp0Zs+e3SK/v02L/FYAAIAN4Pbbb0+nTp1aehmZOXNmxowZk6FDhzaKz+Yg7AAAgML6l3/5l5ZeQpN66623ssUWW3zoPJdiAgAATerVV1/NZz7zmVRVVaV79+45/fTTU1tbW//zcrmccePGZc8990z79u2z1VZb5fjjj8/zzz//ofte1aWY//znP3PhhRdm9913T5L06dMnhx9+eJ577rn6OQsXLsw555yTbbfdNu3atcsOO+yQSy+9NEuXLm2wr1KplHPPPTdXX311+vbtm4qKivTr1y833XRT/Zzrr78+//qv/5okOeCAA1IqlVIqlXL99dfXz7n33ntz0EEHpVOnTtliiy0yZMiQ3HfffQ1+18pLV6dPn57jjz8+W221Vfr06fOhfwaJsAMAAJrYcccdl759++bWW2/NxRdfnF/96lf50pe+VP/zM888M+eff34OPvjg/Pa3v824cePyl7/8Jfvuu29effXVtfpdixcvzsc//vFcffXVOemkk5IkP/zhD9O3b9/MmTMnSbJkyZIccMAB+cUvfpELLrggv//973PSSSdl7NixOfbYYxvt84477shVV12Vyy67LLfcckt69eqVz3zmM7nllluSJEcccUS+/e1vJ0l+8pOfZMqUKZkyZUqOOOKIJMkNN9yQQw45JJ06dcrPf/7z/OY3v0nnzp1z6KGHNoq7JDn22GPz0Y9+NDfffHMmTJiwZh+8vImpra0tJynX1ta29FIAAGCzNmrUqHKS8tixYxuMn3POOeXKysryihUrylOmTCknKf/gBz9oMOell14qt2/fvvzVr361fuyUU04p9+rVq8G8Xr16lU855ZT695dddlk5Sfmee+5ZbRtMmDChnKT8m9/8psH4d7/73XKS8t13310/lqTcvn378ty5c+vHli9fXt55553LH/3oR+vHbr755nKS8gMPPNBgn2+++Wa5c+fO5aOOOqrBeF1dXXmPPfYoDxw4sNGf1ze+8Y3y2nLGDgAAaFJHH310g/e77757lixZknnz5uV3v/tdSqVSTjrppCxfvrz+VV1dnT322CMPPvjgWv2uP/zhD+nbt28OPvjg1c65//7706FDhxx//PENxlde0vn+s2gHHXRQunfvXv++devWOfHEE/M///M/efnllz9wPY8++mgWLlyYU045pcHnW7FiRYYPH57HH388b775ZoNtjjvuuDX5qA24eQoAANCkunTp0uB9RUVFkuTtt9/Oq6++mnK53CCc3muHHXZYq9/12muvpWfPnh84Z8GCBamurk6pVGow3q1bt7Rp0yYLFixoMF5dXd1oHyvHFixYkO222261v2vlpaTvj8j3WrhwYTp06FD/vkePHh+4/lURdgAAQIvp2rVrSqVSHn744frge69VjX2Qrbfe+kPPonXp0iWPPfZYyuVyg7ibN29eli9fnq5duzaYP3fu3Eb7WDn2/mh9v5X7+vGPf5x99tlnlXPeH7XvD8414VJMAACgxRx55JEpl8v5xz/+kb333rvRa7fddlur/R122GH529/+lvvvv3+1cw466KC88cYb+e1vf9tg/Be/+EX9z9/rvvvua3ATl7q6ukycODF9+vSpP1v33rOQ7zVkyJB85CMfycyZM1f5+fbee++0a9durT7jqjhjBwAAtJghQ4bkC1/4Qk477bQ88cQT+cQnPpEOHTpkzpw5eeSRR7Lbbrvl7LPPXuP9nX/++Zk4cWI++clP5vzzz0+S3HnnnXn88cdz5JFH5oADDsjJJ5+cn/zkJznllFMye/bs7LbbbnnkkUfy7W9/O4cffnij7+d17do1Bx54YL7+9a+nQ4cOGTduXJ577rkGjzzo379/kuSnP/1pOnbsmMrKytTU1KRLly758Y9/nFNOOSULFy7M8ccfn27duuW1117Ln/70p7z22msZP378ev85CjsAAKBFXX311dlnn31y9dVXZ9y4cVmxYkW22WabDBkyJAMHDlyrfXXs2DGPPPJIRo8enZ///OdJkvPOOy8DBw7MF77whSRJZWVlHnjggVx66aX53ve+l9deey3bbrttvvzlL2fUqFGN9nn00Udn1113zde+9rW8+OKL6dOnT2688caceOKJ9XNqampy5ZVX5kc/+lGGDh2aurq6XHfddTn11FNz0kknpWfPnhk7dmzOPPPMLF68ON26dcuee+7Z6Bl866r0f2/huclYtGhRqqqqUltbm06dOrX0cgAAYLNRt6KcabMWZt7iJenWsTIDazqndau1/77YhrIh2qBUKuWLX/xi/uM//mMDr27DcsYOAABYb5OfmZMxk2ZmTu2S+rEeVZUZdVS/DO+/9nd5ZO24eQoAALBeJj8zJ2ffML1B1CXJ3NolOfuG6Zn8zJwWWtnmwxk7AABgndWtKGfMpJlZ1fe7yklKScZMmplh/apb9LLMdVWUb645YwcAAKyzabMWNjpT917lJHNql2TarIXNt6jNkLADAADW2bzFq4+6dZnHuhF2AADAOuvWsXKDzmPdCDsAAGCdDazpnB5VlVndt+dKeffumANrOjfnsjY7wg4AAFhnrVuVMuqofknSKO5Wvh91VL9C3jilSIQdAACwXob375HxJ+2V6qqGl1tWV1Vm/El7eY5dM/C4AwAAYL0N798jw/pVZ9qshZm3eEm6dXz38ktn6pqHsAMAADaI1q1KGdynS0svY7PkUkwAAICCE3YAAAAFJ+wAAAAKTtgBAAAUnLADAAAoOGEHAABQcMIOAACg4IQdAABAwQk7AACAghN2AAAABSfsAAAACk7YAQAAFJywAwAAKDhhBwAAUHDCDgAAoOCEHQAAQMEJOwAAoMXMnj07pVIp119//Qbf92677bbB97mxatPSCwAAADZfPXr0yJQpU9KnT5+WXkqhCTsAAKDFVFRUZJ999vnQeW+99Va22GKLZlhRMbkUEwAA2OD+53/+J6eddlp23HHHbLHFFtl2221z1FFH5c9//nODeau6FHP06NEplUqZPn16jj/++Gy11Vb1Z/ROPfXUbLnllvnLX/6Sgw46KB06dMjWW2+dc889N2+99dYHrmnJkiW58MILs+eee6aqqiqdO3fO4MGD81//9V+N5pZKpZx77rn55S9/mV122SVbbLFF9thjj/zud79rNPfvf/97RowYkW7duqWioiK77LJLfvKTn6zDn9q6c8YOAADY4F555ZV06dIl3/nOd7L11ltn4cKF+fnPf55BgwZlxowZ2WmnnT50H8cee2w+/elP56yzzsqbb75ZP75s2bIcfvjhOfPMM3PxxRfn0Ucfzbe+9a288MILmTRp0mr3t3Tp0ixcuDBf/vKXs+222+add97Jvffem2OPPTbXXXddTj755Abzf//73+fxxx/PZZddli233DJjx47NMccck7/+9a/ZYYcdkiQzZ87Mvvvum549e+YHP/hBqqurc9ddd+W8887L/PnzM2rUqHX8E1w7wg4AANjgPvGJT+QTn/hE/fu6urocccQR2XXXXXP11Vfniiuu+NB9nHLKKRkzZkyj8XfeeScXXnhhzjvvvCTJsGHD0rZt21x66aX54x//mCFDhqxyf1VVVbnuuusarOmggw7K66+/niuvvLJR2L399tu5995707FjxyTJXnvtlW222Sa/+c1vcvHFFydJLrjggnTs2DGPPPJIOnXqVL+epUuX5jvf+U7OO++8bLXVVh/6WdeXSzEBAIANbvny5fn2t7+dfv36pV27dmnTpk3atWuXv//973n22WfXaB/HHXfcan/22c9+tsH7ESNGJEkeeOCBD9znzTffnCFDhmTLLbdMmzZt0rZt21xzzTWrXNMBBxxQH3VJ0r1793Tr1i0vvPBCkncv7bzvvvtyzDHHZIsttsjy5cvrX4cffniWLFmSqVOnrtFnXV/CDgAA2OAuuOCCfP3rX8+nPvWpTJo0KY899lgef/zx7LHHHnn77bfXaB89evRY5XibNm3SpUuXBmPV1dVJkgULFqx2f7fddltOOOGEbLvttrnhhhsyZcqUPP744zn99NOzZMmSRvPf/zuSd2/2snL9CxYsyPLly/PjH/84bdu2bfA6/PDDkyTz589fo8+6vlyKCQAAbHA33HBDTj755Hz7299uMD5//vx85CMfWaN9lEqlVY4vX748CxYsaBBec+fOTbLqGHvvmmpqajJx4sQG+166dOkaref9ttpqq7Ru3TojR47MF7/4xVXOqampWad9ry1hBwAAbHClUikVFRUNxn7/+9/nH//4Rz760Y+u9/5vvPHG+u/YJcmvfvWrJMnQoUM/cE3t2rVrEHVz585d5V0x18QWW2yRAw44IDNmzMjuu++edu3ardN+NgRhBwAAbHBHHnlkrr/++uy8887Zfffd8+STT+Z73/tetttuu/Xed7t27fKDH/wgb7zxRj72sY/V3xXzsMMOy8c//vEPXNNtt92Wc845J8cff3xeeumlfPOb30yPHj3y97//fZ3W8qMf/Sgf//jHs99+++Xss89O7969s3jx4vzP//xPJk2alPvvv39dP+ZaEXYAAMAG96Mf/Sht27bN5ZdfnjfeeCN77bVXbrvttnzta19b7323bds2v/vd73LeeeflW9/6Vtq3b5/Pf/7z+d73vveB25122mmZN29eJkyYkGuvvTY77LBDLr744rz88survPvmmujXr1+mT5+eb37zm/na176WefPm5SMf+Uh23HHH+u/ZNYdSuVwuN9tvawaLFi1KVVVVamtr6283CgAAbBpOPfXU3HLLLXnjjTc+dO7m1AbO2AEAABtE3Ypyps1amHmLl6Rbx8oMrOmc1q1WfQMUNixhBwAArLfJz8zJmEkzM6f2/z02oEdVZUYd1S/D+6/6sQVsOE32HLvXX389I0eOTFVVVaqqqjJy5Mj885//XO38ZcuW5aKLLspuu+2WDh06ZJtttsnJJ5+cV155pamWCAAAbACTn5mTs2+Y3iDqkmRu7ZKcfcP0TH5mzgb7Xddff/0aXYa5uWmysBsxYkSeeuqpTJ48OZMnT85TTz2VkSNHrnb+W2+9lenTp+frX/96pk+fnttuuy1/+9vfcvTRRzfVEgEAgPVUt6KcMZNmZlU37lg5NmbSzNSt2KRu7bHRaZJLMZ999tlMnjw5U6dOzaBBg5Ik//mf/5nBgwfnr3/9a3baaadG21RVVeWee+5pMPbjH/84AwcOzIsvvpiePXs2xVIBAID1MG3WwkZn6t6rnGRO7ZJMm7Uwg/us/uHhrJ8mOWM3ZcqUVFVV1Uddkuyzzz6pqqrKo48+usb7qa2tTalU+sAn0y9dujSLFi1q8AIAAJrHvMWrj7p1mce6aZKwmzt3brp169ZovFu3bpk7d+4a7WPJkiW5+OKLM2LEiA+8Nenll19e/z2+qqqqbL/99uu8bgAAYO1061i5QeexbtYq7EaPHp1SqfSBryeeeCJJUio1vq1puVxe5fj7LVu2LJ/+9KezYsWKjBs37gPnXnLJJamtra1/vfTSS2vzkQAAgPUwsKZzelRVZnX/lV/Ku3fHHFjTuTmXtdlZq+/YnXvuufn0pz/9gXN69+6dp59+Oq+++mqjn7322mvp3r37B26/bNmynHDCCZk1a1buv//+D32QYEVFRSoqKj588QAAwAbXulUpo47ql7NvmJ5S0uAmKitjb9RR/TzPromtVdh17do1Xbt2/dB5gwcPTm1tbaZNm5aBAwcmSR577LHU1tZm3333Xe12K6Pu73//ex544IF06eLLlQAAsLEb3r9Hxp+0V6Pn2FV7jl2zKZXL5Sa57+hhhx2WV155JVdffXWS5Atf+EJ69eqVSZMm1c/Zeeedc/nll+eYY47J8uXLc9xxx2X69On53e9+1+DMXufOndOuXbs1+r2LFi1KVVVVamtrP/RsHwAAsOHUrShn2qyFmbd4Sbp1fPfyy5Y8U7c5tUGTPcfuxhtvzG677ZZDDjkkhxxySHbffff88pe/bDDnr3/9a2pra5MkL7/8cu644468/PLL2XPPPdOjR4/619rcSRM2Vaeeemp69+7dbL9v5XdqAQDWVOtWpQzu0yWf3HPbDO7TxeWXzahJnmOXvHuW7YYbbvjAOe89Wdi7d+800clD2CR8/etfz//3//1/Lb0MAAA2Qk0WdsCG1adPnw+dUy6Xs2TJkrRv377Rz95+++1UVlY6CwcAsAlqsksxYVP22muv5Qtf+EK23377VFRUZOutt86QIUNy7733Jnk3sMaOHZtevXqlsrIye+21V/7whz9k6NChGTp0aP1+rr/++pRKpcyePbvB/h988MGUSqU8+OCD9WOruhSzVCrl3HPPzYQJE7LLLrukoqIiP//5z+v3e/fdd+f000/P1ltvnS222CJLly5NkkycODGDBw9Ohw4dsuWWW+bQQw/NjBkzmuKPCgCAZuCMHayDkSNHZvr06fn3f//39O3bN//85z8zffr0LFiwIEkyZsyYjBkzJmeccUaOP/74vPTSS/n85z+furq67LTTTht0Lb/97W/z8MMP5xvf+Eaqq6vTrVu3PP7440mS008/PUcccUR++ctf5s0330zbtm3z7W9/O1/72tdy2mmn5Wtf+1reeeedfO9738t+++2XadOmpV+/fht0fQAAND1hB+vgj3/8Yz73uc/l85//fP3YJz/5ySTJP//5z3z3u9/NMccck5/97Gf1P991110zZMiQDR52b7zxRv785z9nq622qh9bGXYHHXRQ/Z1pk+Sll17KqFGjcu655+aqq66qHx82bFh23HHHjBkzJhMnTtyg6wMAoOkJO1gHAwcOzPXXX58uXbrk4IMPzoABA9K2bdskyZQpU7JkyZJ89rOfbbDNvvvum169em3wtRx44IENou69jjvuuAbv77rrrixfvjwnn3xyli9fXj9eWVmZ/fffPw888MAGXx8AAE3Pd+xgHUycODGnnHJKfvazn2Xw4MHp3LlzTj755MydO7f+cszq6upG261qbH316LH6B36+/2evvvpqkuRjH/tY2rZt2+A1ceLEzJ8/f4OvDwCApueMHayDrl275sorr8yVV16ZF198MXfccUcuvvjizJs3r/6RBHPnzm203dy5cxvcAKWysjJJ6m9qstLaBNYH3eXy/T/r2rVrkuSWW25pkrOHAAC0DGEH66lnz54599xzc9999+WPf/xj9tlnn1RWVubGG29scCnko48+mhdeeKFB2K38v59++ukG37274447mmSthx56aNq0aZP//d//bXSZJgAAxSXsYC3V1tbmgAMOyIgRI7LzzjunY8eOefzxxzN58uQce+yx2WqrrfLlL3853/rWt/K5z30u//qv/5qXXnopo0ePbnQp5sc+9rHstNNO+fKXv5zly5dnq622yu23355HHnmkSdbeu3fvXHbZZbn00kvz/PPPZ/jw4dlqq63y6quvZtq0aenQoUPGjBnTJL8bAICmI+xgLVVWVmbQoEH55S9/mdmzZ2fZsmXp2bNnLrroonz1q19Nklx22WXp0KFDxo0bl1/+8pfZeeedM2HChHz/+99vsK/WrVtn0qRJOffcc3PWWWeloqIin/70p/Mf//EfOeKII5pk/Zdcckn69euXH/3oR/n1r3+dpUuXprq6Oh/72Mdy1llnNcnvBACgaZXK5XK5pRexIS1atChVVVWpra1Np06dWno50MDKh5O/98HjAAA0jc2pDZyxgzVQt6KcabMWZt7iJenWsTIDazqndavV37QEAACak7CDDzH5mTkZM2lm5tQuqR/rUVWZUUf1y/D+q3/UAAAANBeXYsIHmPzMnJx9w/S8/y/JynN140/aS9wBAGykNqc28IByWI26FeWMmTSzUdQlqR8bM2lm6lZsUv82AgBAAQk7WI1psxY2uPzy/cpJ5tQuybRZC5tvUQAAsArCDlZj3uLVR926zAMAgKYi7GA1unWs3KDzAACgqQg7WI2BNZ3To6oyq3uoQSnv3h1zYE3n5lwWAAA0IuxgNVq3KmXUUf2SpFHcrXw/6qh+nmcHAECLE3bwAYb375HxJ+2V6qqGl1tWV1V61AEAABsNDyiHDzG8f48M61edabMWZt7iJenW8d3LL52pAwBgYyHsYA20blXK4D5dWnoZAACwSi7FBAAAKDhhBwAAUHDCDgAAoOCEHQAAQMEJOwAAgIITdgAAAAUn7AAAAApO2AEAABScsAMAYK3U1dVl6dKlLb0M4D2EHQDAJuq5557LZz7zmXTv3j0VFRXp2bNnTj755CxdujSvvfZazjnnnPTr1y9bbrllunXrlgMPPDAPP/xwg33Mnj07pVIpY8eOzbe+9a3U1NSkoqIiDzzwQAt9KmBV2rT0AgAA2PD+9Kc/5eMf/3i6du2ayy67LDvuuGPmzJmTO+64I++8804WLlyYJBk1alSqq6vzxhtv5Pbbb8/QoUNz3333ZejQoQ32d9VVV6Vv3775/ve/n06dOmXHHXdsgU8FrE6pXC6XW3oRG9KiRYtSVVWV2tradOrUqaWXAwDQIg466KBMnz49f/vb37L11lt/6Py6urqUy+UMHz48nTp1ym233Zbk3TN2NTU16dOnT5599tm0bdu2qZcOG8zm1AYuxQQA2MS89dZbeeihh3LCCSd8YNRNmDAhe+21VyorK9OmTZu0bds29913X5599tlGc48++mhRBxsxYQcAsIl5/fXXU1dXl+222261c6644oqcffbZGTRoUG699dZMnTo1jz/+eIYPH56333670fwePXo05ZKB9eQ7dgAAm5jOnTundevWefnll1c754YbbsjQoUMzfvz4BuOLFy9e5fxSqbRB1whsWM7YAQBsYtq3b5/9998/N998c+bPn7/KOaVSKRUVFQ3Gnn766UyZMqU5lghsYMIOAGATdMUVV2TZsmUZNGhQ/vM//zMPPPBAbrrppowYMSKLFy/OkUcembvvvjujRo3K/fffn/Hjx+fQQw9NTU1NSy8dWAcuxQQA2ATtsccemTZtWkaNGpVLLrkkixcvTnV1dQ488MC0a9cul156ad56661cc801GTt2bPr165cJEybk9ttvz4MPPtjSywfWkscdAAAAm6TNqQ2csQMA2ATUrShn2qyFmbd4Sbp1rMzAms5p3coNT2BzIewAAApu8jNzMmbSzMypXVI/1qOqMqOO6pfh/T2mADYHbp4CAFBgk5+Zk7NvmN4g6pJkbu2SnH3D9Ex+Zk4LrQxoTsIOAKCg6laUM2bSzKzqhgkrx8ZMmpm6FZvULRWAVRB2AAAFNW3WwkZn6t6rnGRO7ZJMm7Ww+RYFtAhhBwBQUPMWrz7q1mUeUFzCDgCgoLp1rNyg84DiEnYAAAU1sKZzelRVZnUPNSjl3btjDqzp3JzLAlqAsAMAKKjWrUoZdVS/JGkUdyvfjzqqn+fZwWZA2AEAFNjw/j0y/qS9Ul3V8HLL6qrKjD9pL8+xg82EB5QDABTc8P49MqxfdabNWph5i5ekW8d3L790pg42H8IOAGAT0LpVKYP7dGnpZQAtxKWYAAAABSfsAAAACk7YAQAAFJywAwAAKDhhBwAAUHDCDgAAoOCEHQAAQMEJOwAAgIITdgAAAAUn7AAAAApO2AEAABScsAMAACg4YQcAAFBwwg4AAKDghB0AAEDBCTsAAICCE3YAAAAFJ+wAAAAKTtgBAAAUnLADAAAoOGEHAABQcMIOAACg4IQdAABAwQk7AACAghN2AAAABSfsAAAACk7YAQAAFJywAwAAKDhhBwAAUHDCDgAAoOCEHQAAQMEJOwAAgIITdgAAAAUn7AAAAApO2AEAABScsAMAACg4YQcAAFBwwg4AAKDghB0AAEDBCTsAAICCE3YAAAAFJ+wAAAAKTtgBAAAUnLADAAAoOGEHAABQcMIOAACg4IQdAABAwQk7AACAghN2AAAABSfsAAAACk7YAQAAFJywAwAAKDhhBwAAUHDCroDeeuutjB49Og8++GBLLwUAANgICLsCeuuttzJmzJiNIuxGjx6dUqnU0ssAAIDNmrADAAAoOGHXzJ577rl85jOfSffu3VNRUZGePXvm5JNPztKlS/Paa6/lnHPOSb9+/bLlllumW7duOfDAA/Pwww/Xbz979uxsvfXWSZIxY8akVCqlVCrl1FNPbaFPBAAAtDRh14z+9Kc/5WMf+1imTp2ayy67LH/4wx9y+eWXZ+nSpXnnnXeycOHCJMmoUaPy+9//Ptddd1122GGHDB06tP6yyx49emTy5MlJkjPOOCNTpkzJlClT8vWvf73J1//73/8+e+65ZyoqKlJTU5Pvf//7jeYsWbIkl1xySWpqatKuXbtsu+22+eIXv5h//vOfDeYtXbo0F154Yaqrq7PFFlvkE5/4RJ588sn07t1bpAIAwFpq09IL2JxccMEFadOmTaZNm1Z/1i1JPvvZzyZJdtppp4wbN65+vK6uLoceemhmz56dq666KkOHDk1FRUUGDBiQJNluu+2yzz77NMva77vvvnzyk5/M4MGDc9NNN6Wuri5jx47Nq6++Wj+nXC7nU5/6VO67775ccskl2W+//fL0009n1KhR9QFaUVGRJDnttNMyceLEfPWrX82BBx6YmTNn5phjjsmiRYua5fMAAMCmRNg1k7feeisPPfRQzjjjjAZR934TJkzIT3/608ycOTNLly6tH995552bY5mrdemll6Z79+655557UllZmSQ59NBD07t37/o5d999d+66666MHTs2X/nKV5Ikw4YNy/bbb58TTzwxv/jFL/L5z38+M2fOzK9//etcdNFFufzyy+vnde/ePZ/5zGea/bMBAEDRuRSzmbz++uupq6vLdtttt9o5V1xxRc4+++wMGjQot956a6ZOnZrHH388w4cPz9tvv92Mq23ozTffzOOPP55jjz22PuqSpGPHjjnqqKPq399///1J0uhSyn/9139Nhw4dct999yVJHnrooSTJCSec0GDe8ccfnzZt/FsDAACsLf8V3Uw6d+6c1q1b5+WXX17tnBtuuCFDhw7N+PHjG4wvXry4qZf3gV5//fWsWLEi1dXVjX723rEFCxakTZs2jc5IlkqlVFdXZ8GCBfXzkqR79+4N5rVp0yZdunTZ0MsHAIBNnjN2zaR9+/bZf//9c/PNN2f+/PmrnFMqleq/g7bS008/nSlTpjQYWzmnuc7ibbXVVimVSpk7d26jn713rEuXLlm+fHlee+21BnPK5XLmzp2brl271s9L0uD7eUmyfPny+ugDAADWnLBrRldccUWWLVuWQYMG5T//8z/zwAMP5KabbsqIESOyePHiHHnkkbn77rszatSo3H///Rk/fnwOPfTQ1NTUNNhPx44d06tXr/zXf/1X7r777jzxxBOZPXt2k627Q4cOGThwYG677bYsWbKkfnzx4sWZNGlS/fuDDjooybtnHt/r1ltvzZtvvln/80984hNJkokTJzaYd8stt2T58uVN8hkAAGBT5lLMZrTHHntk2rRpGTVqVC655JIsXrw41dXVOfDAA9OuXbtceumleeutt3LNNddk7Nix6devXyZMmJDbb7+9/nEHK11zzTX5yle+kqOPPjpLly7NKaeckuuvv77J1v7Nb34zw4cPz7Bhw3LhhRemrq4u3/3ud9OhQ4f6xzQMGzYshx56aC666KIsWrQoQ4YMqb8r5r/8y79k5MiRSZJdd901n/nMZ/KDH/wgrVu3zoEHHpi//OUv+cEPfpCqqqq0auXfGwAAYG2UyuVyuaUXsSEtWrQoVVVVqa2tTadOnVp6OZuUSZMm5Wtf+1qee+65VFdX55xzzsnbb7+dMWPGZOX/Gy1ZsiSjR4/OTTfdlFdeeSVdu3bNpz71qXz729/ORz7ykfp9LV26NP/2b/+WG264IYsWLcqee+6ZH/7whxk+fHhOP/30XHHFFS30KQEA2FRsTm0g7JpQ3Ypyps1amHmLl6Rbx8oMrOmc1q1KLbqmjdmjjz6aIUOG5MYbb8yIESNaejkAABTcxtQGTa3JLsV8/fXXc9555+WOO+5Ikhx99NH58Y9/3OCszQc588wz89Of/jQ//OEPc/755zfVMpvM5GfmZMykmZlT+/++k9ajqjKjjuqX4f17tODK1kxTR+k999yTKVOmZMCAAWnfvn3+9Kc/5Tvf+U523HHHHHvssRvs9wAAwOagycJuxIgRefnllzN58uQkyRe+8IWMHDmywc02Vue3v/1tHnvssWyzzTZNtbwmNfmZOTn7hul5/6nQubVLcvYN0zP+pL026rhrjijt1KlT7r777lx55ZVZvHhxunbtmsMOOyyXX355g2flAQAAH65JLsV89tln069fv0ydOjWDBg1KkkydOjWDBw/Oc889l5122mm12/7jH//IoEGDctddd+WII47I+eefv1Zn7Fr6dGvdinI+/t37G0TRe5WSVFdV5pGLDtwoL8tcXZSuXOnGHqUAALBSS7dBc2qS2w9OmTIlVVVV9VGXJPvss0+qqqry6KOPrna7FStWZOTIkfnKV76SXXfddY1+19KlS7No0aIGr5Y0bdbC1UZdkpSTzKldkmmzFjbfotZQ3Ypyxkya2SjqktSPjZk0M3UrNqmvZQIAQOE1SdjNnTs33bp1azTerVu3VT7keqXvfve7adOmTc4777w1/l2XX355qqqq6l/bb7/9Oq15Q5m3ePVRty7zmlORoxQAADZnaxV2o0ePTqlU+sDXE088kSQplRpfZlgul1c5niRPPvlkfvSjH+X6669f7ZxVueSSS1JbW1v/eumll9bmI21w3Tqu2ffD1nRecypylAIAwOZsrW6ecu655+bTn/70B87p3bt3nn766bz66quNfvbaa6+le/fuq9zu4Ycfzrx589KzZ8/6sbq6ulx44YW58sorM3v27FVuV1FRkYqKijX/EE1sYE3n9KiqzNzaJau8pHHld+wG1nRu7qV9qCJHKQAAbM7WKuy6du2arl27fui8wYMHp7a2NtOmTcvAgQOTJI899lhqa2uz7777rnKbkSNH5uCDD24wduihh2bkyJE57bTT1maZLap1q1JGHdUvZ98wPaWkQdytPA856qh+G+WNU4ocpQAAsDlrku/Y7bLLLhk+fHg+//nPZ+rUqZk6dWo+//nP58gjj2xwR8ydd945t99+e5KkS5cu6d+/f4NX27ZtU11d/YF30dwYDe/fI+NP2ivVVQ3PbFVXVW7Ud5VcGaXJ/4vQlTb2KAUAgM1Zkz3H7sYbb8x5552XQw45JMm7Dyj/j//4jwZz/vrXv6a2trapltCihvfvkWH9qpv0Id9NYWWUvv85dtUFerg6AABsbprkOXYtaXN6VkVTqltRLlyUAgDAe21ObdBkZ+wottatShncp0tLLwMAAFgDTfIdOwAAAJqPsAMAACg4YQcAAFBwwg4AAKDghB0AAEDBCTsAAICCE3YAAAAFJ+wAAAAKTtgBAAAUnLADAAAoOGEHAABQcMIOAACg4IQdAABAwQk7AACAghN2AAAABSfsAAAACk7YAQAAFJywAwAAKDhhBwAAUHDCDgAAoOCEHQAAQMEJOwAAgIITdgAAAAUn7AAAAApO2AEAABScsAMAACg4YQcAAFBwbVp6ARtauVxOkixatKiFVwIAALSklU2wshE2ZZtc2C1evDhJsv3227fwSgAAgI3B4sWLU1VV1dLLaFKl8iaWrytWrMgrr7ySjh07plQqtfRy2EAWLVqU7bffPi+99FI6derU0sthA3N8N22O76bPMd60Ob6btk39+JbL5SxevDjbbLNNWrXatL+FtsmdsWvVqlW22267ll4GTaRTp06b5P/o8C7Hd9Pm+G76HONNm+O7aduUj++mfqZupU07WwEAADYDwg4AAKDghB2FUFFRkVGjRqWioqKll0ITcHw3bY7vps8x3rQ5vps2x3fTscndPAUAAGBz44wdAABAwQk7AACAghN2AAAABSfsAAAACk7YAQAAFJywY6P1+uuvZ+TIkamqqkpVVVVGjhyZf/7zn2u8/ZlnnplSqZQrr7yyydbIulvb47ts2bJcdNFF2W233dKhQ4dss802Ofnkk/PKK68036JZrXHjxqWmpiaVlZUZMGBAHn744Q+c/9BDD2XAgAGprKzMDjvskAkTJjTTSllXa3OMb7vttgwbNixbb711OnXqlMGDB+euu+5qxtWyttb27/BKf/zjH9OmTZvsueeeTbtA1svaHt+lS5fm0ksvTa9evVJRUZE+ffrk2muvbabVsq6EHRutESNG5KmnnsrkyZMzefLkPPXUUxk5cuQabfvb3/42jz32WLbZZpsmXiXram2P71tvvZXp06fn61//eqZPn57bbrstf/vb33L00Uc346pZlYkTJ+b888/PpZdemhkzZmS//fbLYYcdlhdffHGV82fNmpXDDz88++23X2bMmJF/+7d/y3nnnZdbb721mVfOmlrbY/zf//3fGTZsWO688848+eSTOeCAA3LUUUdlxowZzbxy1sTaHt+Vamtrc/LJJ+eggw5qppWyLtbl+J5wwgm57777cs011+Svf/1rfv3rX2fnnXduxlWzTsqwEZo5c2Y5SXnq1Kn1Y1OmTCknKT/33HMfuO3LL79c3nbbbcvPPPNMuVevXuUf/vCHTbxa1tb6HN/3mjZtWjlJ+YUXXmiKZbKGBg4cWD7rrLMajO28887liy++eJXzv/rVr5Z33nnnBmNnnnlmeZ999mmyNbJ+1vYYr0q/fv3KY8aM2dBLYwNY1+N74oknlr/2ta+VR40aVd5jjz2acIWsj7U9vn/4wx/KVVVV5QULFjTH8tiAnLFjozRlypRUVVVl0KBB9WP77LNPqqqq8uijj652uxUrVmTkyJH5yle+kl133bU5lso6WNfj+361tbUplUr5yEc+0gSrZE288847efLJJ3PIIYc0GD/kkENWeyynTJnSaP6hhx6aJ554IsuWLWuytbJu1uUYv9+KFSuyePHidO7cuSmWyHpY1+N73XXX5X//938zatSopl4i62Fdju8dd9yRvffeO2PHjs22226bvn375stf/nLefvvt5lgy66FNSy8AVmXu3Lnp1q1bo/Fu3bpl7ty5q93uu9/9btq0aZPzzjuvKZfHelrX4/teS5YsycUXX5wRI0akU6dOG3qJrKH58+enrq4u3bt3bzDevXv31R7LuXPnrnL+8uXLM3/+/PTo0aPJ1svaW5dj/H4/+MEP8uabb+aEE05oiiWyHtbl+P7973/PxRdfnIcffjht2vhPyY3Zuhzf559/Po888kgqKytz++23Z/78+TnnnHOycOFC37PbyDljR7MaPXp0SqXSB76eeOKJJEmpVGq0fblcXuV4kjz55JP50Y9+lOuvv361c2haTXl832vZsmX59Kc/nRUrVmTcuHEb/HOw9t5/3D7sWK5q/qrG2Xis7TFe6de//nVGjx6diRMnrvIfdNg4rOnxraury4gRIzJmzJj07du3uZbHelqbv78rVqxIqVTKjTfemIEDB+bwww/PFVdckeuvv95Zu42cf2ahWZ177rn59Kc//YFzevfunaeffjqvvvpqo5+99tprjf7VaaWHH3448+bNS8+ePevH6urqcuGFF+bKK6/M7Nmz12vtfLimPL4rLVu2LCeccEJmzZqV+++/39m6Fta1a9e0bt260b/8zps3b7XHsrq6epXz27Rpky5dujTZWlk363KMV5o4cWLOOOOM3HzzzTn44IObcpmso7U9vosXL84TTzyRGTNm5Nxzz03ybgiUy+W0adMmd999dw488MBmWTsfbl3+/vbo0SPbbrttqqqq6sd22WWXlMvlvPzyy9lxxx2bdM2sO2FHs+ratWu6du36ofMGDx6c2traTJs2LQMHDkySPPbYY6mtrc2+++67ym1GjhzZ6D8cDj300IwcOTKnnXba+i+eD9WUxzf5f1H397//PQ888IAI2Ai0a9cuAwYMyD333JNjjjmmfvyee+7JJz/5yVVuM3jw4EyaNKnB2N1335299947bdu2bdL1svbW5Rgn756pO/300/PrX/86RxxxRHMslXWwtse3U6dO+fOf/9xgbNy4cbn//vtzyy23pKampsnXzJpbl7+/Q4YMyc0335w33ngjW265ZZLkb3/7W1q1apXtttuuWdbNOmqx27bAhxg+fHh59913L0+ZMqU8ZcqU8m677VY+8sgjG8zZaaedyrfddttq9+GumBuvtT2+y5YtKx999NHl7bbbrvzUU0+V58yZU/9aunRpS3wE/q+bbrqp3LZt2/I111xTnjlzZvn8888vd+jQoTx79uxyuVwuX3zxxeWRI0fWz3/++efLW2yxRflLX/pSeebMmeVrrrmm3LZt2/Itt9zSUh+BD7G2x/hXv/pVuU2bNuWf/OQnDf6u/vOf/2ypj8AHWNvj+37uirlxW9vju3jx4vJ2221XPv7448t/+ctfyg899FB5xx13LH/uc59rqY/AGhJ2bLQWLFhQ/uxnP1vu2LFjuWPHjuXPfvaz5ddff73BnCTl6667brX7EHYbr7U9vrNmzSonWeXrgQceaPb109BPfvKTcq9evcrt2rUr77XXXuWHHnqo/mennHJKef/9928w/8EHHyz/y7/8S7ldu3bl3r17l8ePH9/MK2Ztrc0x3n///Vf5d/WUU05p/oWzRtb27/B7CbuN39oe32effbZ88MEHl9u3b1/ebrvtyhdccEH5rbfeauZVs7ZK5fL//cY6AAAAheSumAAAAAUn7AAAAApO2AEAABScsAMAACg4YQcAAFBwwg4AAKDghB0AAEDBCTsAAICCE3YAAAAFJ+wAAAAKTtgBAAAU3P8Pdj7CDDGQtqoAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 1000x1000 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.decomposition import PCA\n",
    "\n",
    "def pcaPlot(word_list) :\n",
    "    # fetch list of word vectors\n",
    "    vecs = [words[x] for x in word_list]\n",
    "    \n",
    "    #reduce dimensions\n",
    "    model = PCA(n_components = 2)\n",
    "    reduced = model.fit_transform(vecs)\n",
    "    xc = [v[0] for v in reduced]\n",
    "    yc = [v[1] for v in reduced]\n",
    "    \n",
    "    # plot them\n",
    "    plt.figure(figsize=(10,10))\n",
    "    plt.scatter(xc, yc)\n",
    "\n",
    "    # label the plot\n",
    "    for i, word in enumerate(word_list) :\n",
    "        plt.annotate(word, xy=(xc[i], yc[i]+0.01), fontsize=12)\n",
    "    plt.show()\n",
    "\n",
    "pcaPlot(['fast','faster','fastest','slow','slower','slowest'])\n",
    "pcaPlot(['bird', 'cat', 'squirrel', 'dog', 'fish', 'helicopter', 'airplane', 'car', 'submarine', 'whale'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "# Deleting notebook artifacts\n",
    "! rm -rf numberbatch-en-17.06.txt.gz\n",
    "! rm numberbatch-en-17.06.txt"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "sagemaker-distribution:Python",
   "language": "python",
   "name": "conda-env-sagemaker-distribution-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
